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

Drawable Animation

程序员文章站 2022-03-16 14:37:26
...

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

相关标签: Drawable Animation