欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

动画和图形:可绘制动画

程序员文章站 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语法,可用标签和属性的更多信息,请参阅动画资源。

上一篇: 绘制动画

下一篇: 模板——SPFA