当前位置:操作系统 > 安卓/Android >>

Android绘图动画---Drawable Animation

绘图动画会让你依次的加载一系列的绘图资源来创建一个动画。这种动画是一种传统动画,它是用不同的图片序列来创建并依次播放的,看上去像放电影。AnimationDrawable类是绘图动画的基类。

你能够使用AnimationDrawable类的API在代码中定义动画的帧,但是,用一个单独的定义了组成动画帧的列表的XML来完成动画会更加简单。这种类型动画的XML文件要放在你的Android工程的res/drawable/目录中。这种情况下,指令是动画的播放顺序和每一帧动画的播放时间。
这个动画XML文件是由一个<animation-list>根元素和一系列的定义每一帧的<item>子元素组成。<item>元素定义了每一帧的绘图资源和播放时长。以下是绘图动画的一个示例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>

这个动画只有三个帧。通过把第一帧动画的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);

}

注意,在Activity的onCreate()方法执行期间,不能调用AnimationDrawable对象上的start()方法,这是至关重要的,因为AnimationDrawable对象在这时还没有跟窗口绑定。如果要立即播放动画,不需要交互,你可以在Activity的onWindowFocusChanged()回调方法中调用star()方法,onWindowFocusChanged()方易做图在窗口获取焦点时被Android系统调用。

 作者:FireOfStar
 

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,