`

Android 动画专题(2)--- Frame Animation

阅读更多

在上一篇中,介绍了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中也包含很多这方面的例子程序。

分享到:
评论

相关推荐

    玩转Android---2D图形及动画---Frame动画

    AnimationDrawable frameAnimation = (AnimationDrawable) getResources().getDrawable(R.drawable.your_animation); imageView.setBackground(frameAnimation); ``` 然后,为了启动帧动画,我们需要调用`start()`...

    Android代码-Android-Animation-Set

    Android Animation Detailed Tutorial / Android 动画详尽教程       中文讲解(README)请直接点击对应标题 English explanation(or readme), Do not click on the title, please click on the tip ...

    Android---Frame动画

    为了控制动画的播放,你可以随时调用`frameAnimation.stop()`来停止动画,或者通过`frameAnimation.isRunning()`检查动画是否正在运行。 总结来说,Android中的帧动画是一种基于资源的简单动画方式,适用于一系列...

    帧动画 frameanimation

    - 在XML文件中,定义`&lt;animation-list&gt;`标签作为根元素,设置`android:oneshot`属性来决定动画是否只播放一次(true为单次,false为循环)。 - 在`&lt;animation-list&gt;`内添加多个`&lt;item&gt;`标签,每个`&lt;item&gt;`代表一帧...

    Android Animation Frame逐帧动画2

    Android提供了多种动画类型,其中包括 Tween 补间动画和 Frame 逐帧动画。本篇文章将主要聚焦于Frame动画,这是一种通过连续显示不同帧图片来创建动画效果的技术。 **Frame动画原理:** Frame动画基于一系列连续的...

    Android Animation Frame逐帧动画

    在这个例子中,`animation-list`是动画列表的根元素,每个`item`代表一帧动画,`drawable`属性指定了帧对应的图片资源,`duration`属性定义了每帧持续的时间,单位为毫秒。 **使用Frame动画** 在Activity或View中...

    Android 用Animation-list实现逐帧动画

    本篇将深入讲解如何利用`Animation-list`在Android中实现逐帧动画。 一、`Animation-list`基础 `Animation-list`是Android XML动画资源的一种类型,它定义了一组子项(通常为ImageView的源),这些子项按照指定的...

    Frame Animation 帧动画Demo

    在Android中,帧动画主要通过`&lt;animation-list&gt;`标签在XML资源文件中定义。这个`&lt;animation-list&gt;`是`&lt;selector&gt;`的一个子类,它允许我们指定一系列的`&lt;item&gt;`,每个`&lt;item&gt;`对应一帧图片。以下是一个基本的帧动画...

    Android frame by frame animation动画显示

    在Android开发中,帧动画(Frame-by-Frame Animation)是一种常用的技术,用于创建连续的图像序列,模拟视频或gif动图的效果。这种动画通常适用于简单的移动、旋转或渐变效果,比如按钮按下反馈、加载指示器等。接...

    Frame Animation

    基本动画案例:Tween Animation, Frame Animation,介绍参考:http://blog.csdn.net/forwardyzk/article/details/42739281

    android-custom-animation0.2.rar

    2. **帧动画(Frame Animation)**:通过AnimationDrawable类来实现,通过定义一系列的图片帧,按照指定的时间间隔依次显示,形成连续播放的动画效果。 3. **属性动画(Property Animation)**:如ObjectAnimator、...

    Android的动画Animation详解

    Android动画主要分为两大类:Tween动画(渐变动画)和Frame-by-frame动画(逐帧动画)。这两种动画形式能够满足开发者对于基本动画效果的需求。 #### 二、XML中的动画定义 Android动画可以通过XML文件定义,并在...

    使用Animation-list实现等待加载动画效果

    `Animation-list`是Android系统提供的一种用于创建帧动画的视图,常用于实现等待加载、旋转图标等动态效果。本教程将详细讲解如何使用`Animation-list`来创建一个简单的等待加载动画。 首先,我们需要了解`...

    Android Frame动画

    在Android中,帧动画是通过`&lt;animation-list&gt;`标签在XML资源文件中定义的。 - **应用场景**:帧动画常用于加载指示器、按钮点击反馈、滑动刷新效果等场景,为用户提供视觉上的动态体验。 2. **创建帧动画资源文件*...

    Android 动画 Animation Demo

    3. **帧动画(Frame Animation)**:虽然帧动画不是属性动画的一部分,但它是Android动画体系中的一个关键元素。帧动画通过连续播放一系列图像来创建动画效果,常用于简单的2D游戏或加载指示器。`AnimationDrawable`是...

    frameAnimation动画效果

    帧动画是Android动画体系的基础部分,理解并熟练掌握它的使用,可以帮助开发者快速实现各种动态效果,提升应用的视觉体验。不过,随着Android系统的演进,更多高效、灵活的动画机制如`ValueAnimator`、`...

    android之animation-list实现的简单粘稠加载效果使用demo

    2. 编辑XML文件,定义`animation-list`元素,并设置`android:oneshot="false"`,以使动画无限循环。 ```xml &lt;animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false...

    Android高级应用源码-animation的结合蝴蝶飞的动画,使用动画里面的几种类型.zip

    在Android开发中,动画是提升...通过分析这个源码,开发者不仅可以学习到Android动画的基本用法,还能深入了解如何结合实际场景创建生动有趣的动画效果。这个示例对于提升Android应用的用户体验有着很好的参考价值。

    Android学习之笔记---Animation的使用

    Animation从总体来说可以分为两类: Tweened Animations:该类提供了旋转,移动,...Frame-By-Frame Animations:该类可以创建一个Drawable序列,这些Drawable可以按照指定的事件间隔一个一个显示,和动画片差不多。

Global site tag (gtag.js) - Google Analytics