Drawable Animation(逐帧动画)

本文详细介绍了Android中逐帧动画的实现方式,包括如何利用AnimationDrawable类创建动画,以及如何在XML文件中定义动画帧和持续时间。同时,还提供了在代码中启动动画的示例。

原文:Android Developers——Drawable Animation

逐帧动画

逐帧动画让你能够用一组按次序出现的drawable资源来制作一个动画,这也是最传统的一种动画形式,就像电影胶片一样。AnimationDrawable类实现了这种效果。
如果你可以确定动画的每一帧,那么你可以使用AnimationDrawable提供的API,或是在XML文件中罗列出所有帧来制作一个逐帧动画。这类动画的XML文件应当被放在你的Android工程的res/drawable/目录下。这种情况下,你需要提供帧的出现次序以及每一帧的持续时间。
XML文件的根标签为<animation-list>,包含一系列的<item>,每个定义一帧。你还需要为item提供drawable资源以及持续时间。下面是一个例子:

<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,则动画会循环播放。假定这个XML文件被命名为rocket_thrust.xml,并且被存在res/drawable/目录下,下面演示如何在代码中使用它:

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还没有完全依附在window上。如果你希望动画不需要任何交互就开始播放,你需要在onWindowFocusChanged()方法中调用它。
更多信息见https://developer.android.google.cn/guide/topics/resources/animation-resource.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值