Frame动画(帧动画),它允许你实现像播放幻灯片一样的效果,这种动画的实质其实是Drawable,所以这种动画的XML定义方式文件一般放在res/drawable/目录下。
我们依旧可以使用xml或者java方式实现帧动画。但是依旧推荐使用xml,具体如下:
必须是根节点,包含一个或者多个元素,属性有:
android:oneshot true代表只执行一次,false循环执行。 类似一帧的动画资源。
animation-list的子项,包含属性如下:
android:drawable 一个frame的Drawable资源。 android:duration 一个frame显示多长时间。
xml方式模板(常用 推荐)
android:oneshot=["true" | "false"] >
android:drawable="@[package:]drawable/drawable_resource_name"
android:duration="integer" />
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();
java方式
AnimationDrawable anim = new AnimationDrawable();
for (int i = 1; i <= 4; i++) {
int id = getResources().getIdentifier("f" + i, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(id);
anim.addFrame(drawable, 300);
}
anim.setOneShot(false);
image.setBackgroundDrawable(anim);
anim.start();
特别注意,AnimationDrawable的start()方法不能在Activity的onCreate方法中调运,因为AnimationDrawable还未完全附着到window上,所以最好的调运时机是onWindowFocusChanged()方法中。
Android中帧动画在Activity启动时自动运行的几种方式
法一:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
animationDrawable.start();
super.onWindowFocusChanged(hasFocus);
}
法二:
image.post(new Runnable()
{
@Override
public void run()
{
animationDrawable.start();
}
});