帧动画通过顺序播放一系列图像从而产生动画效果,可以简单理解为图片切换动画,很显然,如果图片过多过大就会导致OOM。
不同于View动画,系统提供了另外一个类AnimationDrawable来使用帧动画,帧动画的使用比较简单。首先需要通过XML来定义一个AnimationDrawable。
<?xml version="1.0" encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" // 设置是否只播放一次,默认为false
>
// item = 动画图片资源;duration = 设置一帧持续时间(ms)
<item android:drawable="@drawable/a0" android:duration="100"/>
<item android:drawable="@drawable/a1" android:duration="100"/>
<item android:drawable="@drawable/a2" android:duration="100"/>
<item android:drawable="@drawable/a3" android:duration="100"/>
<item android:drawable="@drawable/a4" android:duration="100"/>
<item android:drawable="@drawable/a5" android:duration="100"/>
<item android:drawable="@drawable/a6" android:duration="100"/>
<item android:drawable="@drawable/a7" android:duration="100"/>
<item android:drawable="@drawable/a8" android:duration="100"/>
<item android:drawable="@drawable/a9" android:duration="100"/>
<item android:drawable="@drawable/a10" android:duration="100"/>
<item android:drawable="@drawable/a11" android:duration="100"/>
</animation-list>
然后将上述的Drawable作为View的背景并通过Drawable来播放动画即可:
// 载入动画
btn_startFrame.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 1. 设置动画
iv.setImageResource(R.drawable.knight_attack);
// 2. 获取动画对象
animationDrawable = (AnimationDrawable) iv.getDrawable();
// 3. 启动动画
animationDrawable.start();
}
});
// 停止动画
btn_stopFrame.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 1. 设置动画
iv.setImageResource(R.drawable.knight_attack);
// 2. 获取动画对象
animationDrawable = (AnimationDrawable) iv.getDrawable();
// 3. 暂停动画
animationDrawable.stop();
}
});
网友评论