`

Drawable Animation

阅读更多

Drawable Animation

 

        帧动画能使得你一个接一个的加载一组图片资源来产生动画。这是一种传统的动画方式。通过顺序的播放不同的图片,如同播放一个电影。AnimationDrawable类是Drawable动画(帧动画)的基础。

当你通过代码实现帧动画,你需要使用到AnimationDrawable类的API。而使用一个XML文件列出组成动画的所有帧来实现动画更简单。这种动画的XML文件位于你的Android工程的res/drawable/目录下。这种情况下,XML定义的是动画的帧顺序和每帧持续的时间。

 

        XML文件由<animation-list>元素和一些列的<item>子节点组成。<animation-list>元素作为XML文件的根节点。<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>

 

 

       该动画仅仅只有3帧。通过设置该帧列表的android:oneshot属性为true来设置该动画仅播放一次,然后停留在最后一帧的位置。如果设置为false,动画将无限循环。使用保存在res/drawable/目录下的rocket_thrust.xml文件,可以将该文件定义的动画作为一个背景图片添加在一个View对象上,然后调用该动画播放。如下是一个例子Activity,该例子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);
}

 

        注意:在AnimationDrawable上被调用的start()方法不能在Activity里的onCreate()方法里被调用。因为这时AnimationDrawable还没有被附加到window上。如果你想要立即的播放动画,而不需要交互,那么你能在Acitivity的onWindowFocusChanged()方法里调用该方法,这样当Window获取焦点后调用该方法。

关于XML语法、有效标签和属性的更多的介绍,参见Animation Resources

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics