转载请注明出处: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

最新文章

  1. 1002 Phone Numbers 解题报告
  2. ndoutils2.2.0(ndo2db)中文乱码问题解决
  3. MaterialCalendarView使用时遇到的问题
  4. Logistic 分类器与 softmax分类器
  5. php类自动装载、链式操作、魔术方法
  6. poj 2010 Moo University - Financial Aid
  7. Code Blocks 使用 VC2013编译HelloWord
  8. java 并发多线程异步
  9. [ACdream]女神教你字符串——违和感
  10. EasyUI 中easyui-textbox和easyui-searchbox文本框的点击事件。
  11. ubuntu下安装pandas出现 compile failed with error code 1 in /tmp/pip_build_hadoop/pandas
  12. linux df -i 100%处理
  13. Linux系统下virtuoso数据库安装与使用
  14. c#+.net常用功能点
  15. Ubuntu16安装wine(转)
  16. python数据分析Adult-Salary预测
  17. Chapter 2 软件过程
  18. Windows下重置Mysql密码
  19. Android TextView(EditView)文字底部或者中间 加横线
  20. [BZOJ4289][PA2012]TAX(最短路)

热门文章

  1. NServiceBus入门:启程(Introduction to NServiceBus: Getting started)
  2. Microsoft SQL Server 2012 Internals
  3. segmentfault hackthon比赛感悟
  4. loadrunner11操作手册
  5. 【spring data jpa】根据一个时间字段 查询 时间段的处理方法
  6. 常见Linux版本
  7. 获取dataset结果集的第一行第一列字段
  8. es6数组去重复
  9. 如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法
  10. WAF攻击与防御