您的位置:首页 > 移动开发 > Android开发

Android逐帧动画、属性动画的简单实现

2017-05-18 18:37 591 查看

需求

这里我们实现一个简单的逐帧动画,即一组图片快速轮换的动画效果。

实现

动画的布局文件:将每一个图片放入(这个xml文件在AS2.2只能放在drawable目录下,低版本或许可以放在anim目录)


<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item
android:drawable="@drawable/order_loading_1"
android:duration="150" />
<item
android:drawable="@drawable/order_loading_2"
android:duration="150" />
<item
android:drawable="@drawable/order_loading_3"
android:duration="150" />
<item
android:drawable="@drawable/order_loading_4"
android:duration="150" />
<item
android:drawable="@drawable/order_loading_5"
android:duration="150" />
</animation-list>


页面的布局文件:(使用ImageView作为动画载体)


<ImageView
android:visibility="gone"
android:layout_centerInParent="true"
android:layout_marginBottom="50dp"
android:id="@+id/img_loading"
android:layout_width="145dp"
tools:visibility="visible"
android:layout_height="138dp" />


代码实现:


private AnimationDrawable animLoading;
private ImageView imgLoading;

/**
* 初始化动画
*/
private void initAnim() {
imgLoading.setBackgroundResource(R.drawable.order_loading);
animLoading = (AnimationDrawable) imgLoading.getBackground();
// 开始动画
animLoading.start();
}

// 停止动画
if (animLoading.isRunning()) {
animLoading.stop();
}


注意:在这里释放动画图片资源会报错,图片资源已释放。自带的回收机制会自动进行回收。


需求

下面继续实现简单的属性动画,并带声音。


实现

动画的布局文件:


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="400"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="-580" />

<scale android:duration="400"
android:fromXScale="1"
android:fromYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.3"
android:toYScale="1.3" />
</set>


页面的布局文件:(使用ImageView作为动画载体)


<ImageView
android:id="@+id/rocket"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:src="@drawable/rocket"
tools:visibility="visible"
android:visibility="gone"/>


代码实现:


private SoundPool soundPool;
private Animation animation;
ImageView rocket;

//配置火箭声音和动画
private void loadSound() {
animation = AnimationUtils.loadAnimation(getActivity(), R.anim.rocket_anim);
soundPool = new SoundPool(2, AudioManager.STREAM_SYSTEM, 5);
soundPool.load(getActivity(), R.raw.rocket, 1);
}

// 开始动画 播放声音
rocket.startAnimation(animation);
animation.setAnimationListener(new Animation.AnimationListener() {

4000
@Override
public void onAnimationStart(Animation animation) {
rocket.setVisibility(View.VISIBLE);
// 播放音效
soundPool.play(1, 1, 1, 0, 0, 1);
}

@Override
public void onAnimationEnd(Animation animation) {
rocket.setVisibility(View.GONE);
}

@Override
public void onAnimationRepeat(Animation animation) {

}
});


注意:将声音文件放在raw文件下

动画Drawable

drawable:

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/progress_single"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360"/>


布局文件中使用:

<ProgressBar
android:id="@+id/progress_bar"
style="@android:style/Widget.ProgressBar.Small"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_gravity="center"
android:indeterminateDrawable="@drawable/anim_progress_bar" />


如此可以直接通过布局的方法实现动画,不需要在代码中进行设置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 动画