逐帧动画(Frame Animation)
逐帧动画也叫Drawable Animation,它利用人眼的视觉暂留效应--光对视网膜产生的视觉在光停止作用后,仍保留一段时间的现象。
逐帧动画:指定动画中的每一帧对应的图片和持续的时间,然后就可以播放动画了。
定义逐帧动画——xml资源文件方式
首先将每一帧的图片放到res/drawable目录中
在res/anim目录中建一个动画xml文件 根节点animation-list
<?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/girl_1"
android:duration="200" />
<item
android:drawable="@drawable/girl_2"
android:duration="200" />
</animation-list>
android:oneshot 用来控制是否循环播放
android:duration 播放每一帧持续的时间
代码中创建
AnimationDrawable animationDrawable = new AnimationDrawable();
for (int i = 0; i < 5; i++) {
int id = getResources().getIdentifier("" + i, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(id);
animationDrawable.addFrame(drawable,120);
}
imageView.setBackgroundDrawable(animationDrawable);
animationDrawable.setOneShot(fa
View载体执行动画
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// [1]找到ImageView 来执行我们的动画
ImageView imageView = (ImageView) findViewById(R.id.iv);
// [2] setBackgroundResource设置rocketImage 背景资源 (资源就是我们刚刚在drawable下定义的动画)
imageView.setBackgroundResource(R.drawable.my_anim);
// [3] getBackground()获取刚刚设置背景资源(动画)
AnimationDrawable rocketAnimation = (AnimationDrawable) imageView
.getBackground();
}
public void startAnimation(View view) {// 点击按钮调用此方法
if (rocketAnimation.isRunning()) {
//停止动画
rocketAnimation.stop();
}
//开始动画
rocketAnimation.start();
}
}
注意:
在动画start()之前要先stop(),不然在第一次动画之后会停在最后一帧,这样动画就只会触发一次。
最后一点是SDK中提到的,不要在onCreate中调用start,因为AnimationDrawable还没有完全跟Window相关联,如果想要界面显示时就开始动画的话,可以在onWindowFoucsChanged()中调用start()。