【Android界面实现】Drawable Animation 使用介绍

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992

    (目前只能用在View对象上的动画效果的实现有两种,一种就是上一篇的View Animation,即补间动画,剩下的一种,就是这一篇要介绍的,Drawable Animation,即帧动画。在最新版本的API中,出现了一个更加强大的方式,PropertyAnimation,即属性动画,稍后将会介绍)

    Drawable animation允许我们一张一张的加载Drawable资源。这是一种传统的动画方式,通过一系列不同图片的顺序播放,可以制造出电影一样的效果。AnimationDrawable类是实现这种动画效果的基类。

    用AnimationDrawable提供的API,我们当然可以在代码中定义想要展示的每一帧的图片,但是使用xml来列出我们想要展现的图片的方式更加的方便。如果采用xml的方式,我们需要在res/drawable文件下面创建,然后在xml文件里面指定我们要展示的每一帧的图片资源和持续的时间。

    XML文件由<animation-list>作为根节点元素,在根节点里面,是一系列的<item>的子节点,在子节点里面定义了要展示的图片和每一帧持续的时间。下面是一个使用XML文件定义Drawable Animation的一个实例。

<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的示例,我们给一个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上。如果我们想马上播放动画,我们可以在onWindowFocusChanged()方法里面调用,因为这个方法是在window已经获取到焦点之后回调的,可以保证已经绑定结束。

    如果想了解更多关于XML的语法或者是可选的tag和属性值,请参考Animation Resources。


    原文地址:http://developer.android.com/guide/topics/graphics/drawable-animation.html#top

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。