原文:Android Developers——Drawable Animation
逐帧动画
逐帧动画让你能够用一组按次序出现的drawable资源来制作一个动画,这也是最传统的一种动画形式,就像电影胶片一样。AnimationDrawable类实现了这种效果。
如果你可以确定动画的每一帧,那么你可以使用AnimationDrawable提供的API,或是在XML文件中罗列出所有帧来制作一个逐帧动画。这类动画的XML文件应当被放在你的Android工程的res/drawable/目录下。这种情况下,你需要提供帧的出现次序以及每一帧的持续时间。
XML文件的根标签为<animation-list>,包含一系列的<item>,每个定义一帧。你还需要为item提供drawable资源以及持续时间。下面是一个例子:
<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文件被命名为rocket_thrust.xml,并且被存在res/drawable/目录下,下面演示如何在代码中使用它:
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);
}
需要注意的一点是,不能在Activity的onCreate()方法中调用AnimationDrawable的start()方法,因为此时AnimationDrawable还没有完全依附在window上。如果你希望动画不需要任何交互就开始播放,你需要在onWindowFocusChanged()方法中调用它。
更多信息见https://developer.android.google.cn/guide/topics/resources/animation-resource.html
本文详细介绍了Android中逐帧动画的实现方式,包括如何利用AnimationDrawable类创建动画,以及如何在XML文件中定义动画帧和持续时间。同时,还提供了在代码中启动动画的示例。
1万+

被折叠的 条评论
为什么被折叠?



