Delion

移动研发老兵,目前专注移动浏览器开发

Android 动画专题--- 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() 停止当前动画
阅读更多
个人分类: android animation
想对作者说点什么? 我来说一句

android基本动画大盘点

2015年06月16日 2.9MB 下载

Android动画之Animation

2016年06月11日 3.66MB 下载

android 动画

2016年04月20日 5.66MB 下载

android动画

2015年06月02日 2.96MB 下载

没有更多推荐了,返回首页

不良信息举报

Android 动画专题--- Frame Animation

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭