Drawable Animation
Drawable animation lets you load a series of Drawable resources one after another to create an animation. This is a traditional animation in the sense that it is created with a sequence of different images, played in order, like a roll of film. TheAnimationDrawableclass is the basis for Drawable animations.
Drawable animation是一个一个的加载一些列的图片来创建动画的,他是一种传统的动画,事实上就是一个不同图片的序列AnimationDrawable是Drawable animations 的基类
While you can define the frames of an animation in your code, using theAnimationDrawableclass API, it's more simply accomplished with a single XML file that lists the frames that compose the animation. The XML file for this kind of animation belongs in the res/drawable/ directory of your Android project. In this case, the instructions are the order and duration for each frame of the animation.
虽然可以使用AnimationDrawable类在代码中定义帧动画,但最好是使用XML文件列出组成动画的所有帧。这个xml文件放在 res/drawable/目录下,事实上,所有的指令就是每一个帧动画的顺序和持续时间
The XML file consists of an
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> <item android:drawable="@drawable/rocket_thrust2" android:duration="200"></item> <item android:drawable="@drawable/rocket_thrust3" android:duration="200"></item></animation-list>
上面的例子是一个3帧动画, 通过将android:oneshot设置为true,那他就只会循环一次,并停留在最后一个帧上,若为false的话,就会循环运行
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()方法不能在你的Activity的onCreate()方法中调用,因为那时候AnimationDrawable尚未完全附着于窗口。如果你必须立刻调用动画,切没有交互的话,可以在onWindowFocusChanged()中调用。因为这个方法是窗口获得焦点时调用的
For more information on the XML syntax, available tags and attributes, see Animation Resources.