动画和图形:可绘制动画
程序员文章站
2022-03-01 15:05:26
...
可绘制的动画可让您一个接一个地加载一系列的Drawable资源来创建动画。 这是一个传统的动画,它的意思是创建一系列不同的图像,按顺序播放,像一卷电影。 AnimationDrawable类是可绘制动画的基础。
虽然您可以使用AnimationDrawable类API在代码中定义动画的框架,但更简单的是使用单个XML文件完成,该XML文件列出了构成动画的框架。 这种动画的XML文件属于您的Android项目的res / drawable /目录。 在这种情况下,指令是动画每帧顺序的持续时间。
XML文件由作为根节点的<animation-list>元素和每个定义一个帧的一系列子<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);
}
请注意,在Activity的onCreate()方法中,AnimationDrawable上调用的start()方法无法调用,因为AnimationDrawable尚未完全附加到窗口。 如果要立即播放动画,而不需要交互,那么您可能希望在Activity中的onWindowFocusChanged()方法中调用它,当Android将您的窗口置于焦点时,该动画将被调用。
有关XML语法,可用标签和属性的更多信息,请参阅动画资源。