标签:androidoneshot onwindowfocuschanged animationdrawable
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. TheAnimationDrawable
class
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
<animation-list>
element as the root node and a series of child<item>
nodes that each define a frame: a drawable resource for the frame and the frame duration. Here‘s an example XML file for a Drawable animation:
xml文件由根元素
<animation-list>
和一系列子元素<item>组成,其中<item>定义了每个帧对应的图片和持续时间,如下:
<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>
上面的例子是一个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.
标签:androidoneshot onwindowfocuschanged animationdrawable
原文地址:http://blog.csdn.net/candicelijx/article/details/45919141