可绘制动画
可绘制动画通过加载一系列可绘制资源实现。是一种传统的动画。在某种意义上说,是将一系列不同的图片资源按照顺序播放,就像胶卷。AnimationDrawable
类是可绘制动画的基本类。
可以在代码里面使用 AnimationDrawable
API接口创建动画帧,但是使用一个简单的XML文件会更简单一些。XML文件位于 res/drawable/ 目录里面。定义每个动画帧的属性是顺序和时长。
XML文件由一个<animation-list> 元素作为根节点以及一系的子节点<item>组成。这个<item>定一个一个帧的图片资源以及帧动画的时长。下面是一个XML文件的例子:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
该动画只运行三个帧。通过设置 android:oneshot 属性为 true,它将会只播放一遍,然后停止在最后帧的画面。如果设置为false ,则将会连续播放。通过将XML文件保存在 res/drawable 目录里面,并且命名为 rocket_thrust.xml ,它可以被添加到一个view里面作为背景图片被调用播放。下面是一个Activity例子,动画被添加到一个 ImageView 里面,在屏幕被触摸会动画播放:
AnimationDrawable rocketAnimation;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
rocketAnimation.start();
return true;
}
return super.onTouchEvent(event);
}
注意: AnimationDrawable 里面start() 方法不能在 Activity里面的onCreate() 里面被调用,因为此时,AnimationDrawable尚未被窗口绑定。如果你想立刻播放该动画,不需要交互,你可以在
方法里面调用它。在Android 聚焦你的窗口时,它会被调用。onWindowFocusChanged()
欲了解更多关于XML语法,可用标签,以及属性,青参阅:Animation Resources.