可绘制动画
可绘制动画可让您一个接一个地加载一系列Drawable资源来创建动画。 这是一个传统的动画,在它的意义上,它是用一系列不同的图像,按顺序播放,像一卷电影。 该AnimationDrawable
类是可绘制动画的基础。
虽然你可以在你的代码中定义动画的帧,使用AnimationDrawable
类的API,它更简单地与列出组成动画帧一个XML文件来实现的。 对于这种动画的XML文件所属的res/drawable/
你的Android项目的目录中。 在这种情况下,指令是动画的每个帧的顺序和持续时间。
该XML文件包含一个的<animation-list>
元素为根节点和一系列子<item>
的每个限定一帧的节点:对于帧和帧持续时间的绘制资源。 下面是一个Drawable动画的示例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保存为rocket_thrust.xml
在res/drawable/
项目的目录中,它可以被添加作为背景图像以一个视图,然后调用播放。 这里有一个例子活动,其中动画添加到一个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);
}
值得注意的是,它是重要的start()
不能在期间调用叫上AnimationDrawable方法onCreate()
的活性的方法,因为AnimationDrawable尚未完全附着到窗口。 如果你想立即播放动画,而不需要互动,那么你可能想从调用它onWindowFocusChanged()
在你的活动方法,当Android将你的窗口,成为关注的焦点,这将被调用。
有关XML语法的详细信息,可标记和属性,看动画资源
。
转载于:https://www.jianshu.com/p/62e752588718