Android中使用多张图片组成动画 AnimationDrawable

AnimationDrawable 就是在 andriod里可以逐帧的播放图片,然后产生一种动态的效果;
Drawable Animation 可以让我们按顺序加载一系列的资源来创建一个动画。动画的创建和传统意义上电影胶卷的播放一样,是通过加载不同的图片,然后按顺序进行播放来实现的。在代 码的实现上 AnimationDrawable 类是基于 Drawable animations 来实现的。

虽然我们可以通过  AnimationDrawable 类的 API 在代码中定义一个动画的所有帧, 但通过一个包含所有帧的 XMl 文件来完成一个动画会更加的简单。这个 XML 文件应该被创建在 Android 项目的 /res/drawable/ 目录下,这样动画内的每一帧就会按照顺序和固定的时间间隔来播放。
这个 XML 文件包含一个 <animation-list> 节点作为根节点,同时包含一系列定义了每一帧显示资源和显示时间的  <item> 节点作为子节点。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
   android:oneshot="true">

   <item android:drawable="@drawable/scan1" android:duration="100" />
   <item android:drawable="@drawable/scan2" android:duration="100" />
   <item android:drawable="@drawable/scan3" android:duration="100" />
   <item android:drawable="@drawable/scan4" android:duration="100" />

</animation-list>

通过上面的代码我们可以看到,这个动画包含 4 帧。另外我们可以通过设置  </animation-list> 节点下的  android:oneshot 属性来控制动画的循环次数,如果将  android:oneshot的属性设置为 true,那么这个动画只会循环一次并停留在最后一帧。如果设置为 false,那么这个动画将会不停的循环下去。将这个文件命名文 scan.xml 并保存到项目的 /res/drawable/ 目录下,然后它就可以当作背景图片被添加到另一个视图上,并被调用显示。
imageView =(ImageView)findViewById(R.id.imageView);//放置的ImageView控件
//设置动画背景 

imageView.setBackgroundResource(R.drawable.animation_list);//其中R.drawable.animation_list就是上一步准备的动画描述文件的资源名 


//获得动画对象 

animaition = (AnimationDrawable)imageView.getBackground();   //不一定是设置背景,也可以作为src图片设置
最后,就可以启动动画了,代码如下:   
<span style="font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 19.5px; margin: 0px; padding: 0px; color: rgb(255, 0, 0);"></span><pre name="code" class="java" style="font-size: 13px; line-height: 19.5px;">animaition.<span style="font-family: arial, helvetica, sans-serif; margin: 0px; padding: 0px;">start</span><span style="color: rgb(0, 0, 0); font-family: arial, helvetica, sans-serif;">() ;</span>
//是否仅仅启动一次? 
 
 
animaition.setOneShot(false);   



此外,需要特别注意的是,动画的 start() 方法不能在 Activity 的 onCreate(Bundle savedInstanceState) 方法中执行,这是因为动画还没有完全的填充到窗口上。如果你想立即执行动画而不需要和用户进行交互,那么你可以在 Activity 的 onWindowFocusChanged() 方法中来调用 start() 方法。这样当你的应用在获得窗口焦点的时候 start() 就会马上被调用。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值