在上一篇中,介绍了Tween Animation,这里我们将介绍另外一种动画Frame Animation。

Frame Animation是顺序播放事先做好的图像,跟电影类似。

不同于animation package, Android SDK提供了另外一个类AnimationDrawable来定义来使用Frame Animation。

SDK位置:

Tween animation  : android.view.animation 包

Frame animation   : android.graphics.drawable.AnimationDrawable 类


1.Frame Animation格式定义

Frame Animation可以在XML Resource定义(还是存放到res\anim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样。

其格式是:首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画:当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:

XML属性 说明
drawable 当前帧引用的drawable资源
duration 当前帧显示的时间(毫秒为单位)
oneshot 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。
variablePadding If true, allows the drawable’s padding to change based on the current state that is selected.
visible 规定drawable的初始可见性,默认为flase;


2.案例分析

(1)定义XML,保存在res/anim/文件夹下,命名为rocket_thrust.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> 

(上面的XML就定义了一个Frame Animation,其包含3帧动画,3帧动画中分别应用了drawable中的3张图片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每帧动画持续200毫秒。)

(2)在java类中的OnCreate()中增加如下代码:

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.anim.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);
} 

码运行的结果想必大家应该就知道了(3张图片按照顺序的播放一次)。

不过有一点需要强调的是:启动Frame Animation动画的代码rocketAnimation.start();不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。  


3.AnimationDrawable的介绍

AnimationDrawable

获取、设置动画的属性
int getDuration() 获取动画的时长
int getNumberOfFrames() 获取动画的帧数
boolean isOneShot()

Void setOneShot(boolean oneshot)

获取oneshot属性
设置oneshot属性
void inflate(Resurce r,XmlPullParser p,
AttributeSet attrs)
增加、获取帧动画
Drawable getFrame(int index) 获取某帧的Drawable资源
void addFrame(Drawable frame,int duration) 为当前动画增加帧(资源,持续时长)
动画控制
void start() 开始动画
void run() 外界不能直接掉调用,使用start()替代
boolean  isRunning() 当前动画是否在运行
void stop() 停止当前动画

Frame Animation的定义、使用比较简单,在这里已经详细介绍完了,更加深入的学习还是到Android SDK去仔细了解吧,在Android SDK中也包含很多这方面的例子程序。

转载于:https://www.cnblogs.com/playing/archive/2011/08/21/2147874.html

Android 动画专题(2)--- Frame Animation相关推荐

  1. android动画介绍之 自定义Animation动画实现qq抖一抖效果

    昨天我们介绍了Animation的基本用法.小伙伴们了解的怎么样了?如果还没有了解过Animation的小伙伴可以看看这篇博客 android动画介绍--Animation 实现loading动画效果 ...

  2. Android动画效果之自定义ViewGroup添加布局动画

    Android动画效果之自定义ViewGroup添加布局动画 前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢 ...

  3. Android动画之Frame Animation

    在Android中,动画Animation的实现有两种方式:Tween Animation(渐变动画)和Frame Animation(帧动画).渐变动画是通过对场景里的对象不断做图像变换(平移.缩放 ...

  4. Android动画模式

    在Android中,有两种动画模式:Tween Animation(渐变动画)和Frame Animation(帧动画).渐变动画是通过对场景里的对象不断做图像变换(平移.缩放.旋转等)来产生动画效果 ...

  5. Android 动画方案

    关于 动画的实现, Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移.缩 ...

  6. android动画平移 加速,Android动画总结

    Android中的动画大致上分为视图动画(View Animation)和属性动画(Property Animation)两种,其中视图动画又分为补间动画(Tween Animation)和帧动画两种 ...

  7. Android动画大合集

      android中的动画实现方式繁多,在项目中也经常用到动画,网上有很多人也都进行了一些总结,但是感觉还是零零散散,自己总结一下才能加深印象,以后有时间了,也可以从各个分类里进一步去补充完善. 如果 ...

  8. Android动画渲染过程及原理(matrix),matrix动画,动画优化

    -- 矩阵(Matrix), Matrix动画 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵.在物理学中,矩阵于电路学.力学.光学和量子物理中都 ...

  9. 帅气的属性动画赏析(Property Animation)

    权利声明:转载请注明出处http://blog.csdn.net/hello_chillax/article/details/44992787 今天我们来学习Android中的一个比较好玩的动画效果: ...

最新文章

  1. 精美的电路图都是怎么画出来的?
  2. Lesson 15.1 学习率调度基本概念与手动实现方法
  3. STM32(Cortex-M3)开发,RVDS和MDK谁优谁劣?
  4. Java线程池示例:并行计算200000以内的质数个数
  5. 虚拟交换机软件_H3C交换机IRF配置介绍
  6. JS 基础 —— JavaScript 关键字(keyword)与保留字
  7. input子系统分析一
  8. HTTPS 证书生成原理和部署细节
  9. 分页解决方案 之 分页算法——Pager_SQL的思路和使用方法
  10. C++实现进程通信(管道pipe)
  11. 美团外卖【成都】技术团队,招人啦!
  12. 怎么简化学生入校查询健康码和测温的流程-校园健康码查询平台,校园安防平台,家校互动平台
  13. 农业遥感技术科研成果汇总
  14. 安徽大学电气工程及自动化学院本科实验报告(MATLAB)——六、七章
  15. 1.8.ARM裸机第八部分-按键和CPU的中断系统
  16. rocketMQ 删除过期文件(磁盘空间不足导致mq消息发送不了)
  17. 方波信号傅里叶级数展开
  18. Cisco 静态路由设计计算机网络课设/实验(含.pkt文件)
  19. 高分难题,绝对有难度
  20. 20-交换技术——Trunk技术详解

热门文章

  1. Exception in thread main java.io.IOException: No FileSystem for scheme: hdfs
  2. 如何运行含spark的python脚本
  3. 大话数据结构:多路查找
  4. WIN10 软连接释放c盘空间
  5. mysql分隔符声明_MySQL分隔符发生错误时?
  6. 安装oracle后,电脑变卡变慢的解决办法
  7. Java内存区域与内存溢出
  8. oracle exchange partition 測试
  9. 数据加密 - TDE透明数据加密原理
  10. 【unity】与Android Activity交互并调用JAVA代码传递参数