http://hi.baidu.com/baibaixiaoyao/blog/item/5c9e92529b759c1d0cf3e3b0.html
[不完全转载,原文:http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html]
Frame Animation
Frame Animation是顺序播放事先做好的图像,跟电影类似。不同于animation package, Android SDK提供了另外一个类AnimationDrawable来定义、使用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; |
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() |
停止当前动画 |
下面就给个具体的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毫秒。
然后我们将以上XML保存在res/anim/文件夹下,命名为rocket_thrust.xml,显示动画的代码:
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.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()中启动动画,就只能看到第一张图片。这里实在拖曳事件中实现的。(这里现在main.xml里定义一个ImageView,可以先不指定src,运行时会自动绑定)
下面,阅读Android SDK中对AnimationDrawable的介绍,有个简单的了解:
分享到:
相关推荐
AnimationDrawable frameAnimation = (AnimationDrawable) getResources().getDrawable(R.anim.frame_animation); imageView.setBackground(frameAnimation); frameAnimation.start(); ``` **控制动画行为** 除了...
Android提供了多种动画类型,其中包括 Tween 补间动画和 Frame 逐帧动画。本篇文章将主要聚焦于Frame动画,这是一种通过连续显示不同帧图片来创建动画效果的技术。 **Frame动画原理:** Frame动画基于一系列连续的...
这篇详细讲解将围绕标题和描述中的知识点展开,包括Tween Animation(补间动画)和Frame Animation(帧动画),帮助开发者理解和实践Android动画。 首先,我们来探讨 Tween Animation。Tween Animation是Android中...
基本动画案例:Tween Animation, Frame Animation,介绍参考:http://blog.csdn.net/forwardyzk/article/details/42739281
- 在布局文件中设置一个ImageView,其背景资源引用帧动画的XML文件:`android:background="@anim/frame_animation"`。 4. **监听帧动画状态**: - 可以通过实现`Animation.AnimationListener`接口来监听动画的...
在Android开发中,帧动画(Frame-by-Frame Animation)是一种常用的技术,用于创建连续的图像序列,模拟视频或gif动图的效果。这种动画通常适用于简单的移动、旋转或渐变效果,比如按钮按下反馈、加载指示器等。接...
在上述代码中,`@drawable/frame1`、`@drawable/frame2`等表示每一帧的图片资源,`android:duration`则是每帧显示的时间,单位为毫秒。帧的顺序和持续时间决定了动画的播放效果。 要使用这个动画,我们需要在Java...
Android Animation主要分为两大类:补间动画(Tween Animation)和帧动画(Frame Animation)。本资源文件主要关注补间动画,这是一种通过改变对象属性(如位置、大小、透明度等)在一段时间内平滑过渡的动画效果。 补...
Android Animation系统提供了多种动画类型,包括属性动画(Property Animation)、补间动画(Tween Animation)和帧动画(Frame Animation)。属性动画是Android 3.0(API Level 11)引入的,它允许对对象的任何属性...
1. **帧动画(Frame Animation)**:帧动画是通过连续播放一系列静态图像来创建动态效果。在Android中,可以使用`<animation-list>`标签在XML资源文件中定义帧动画,并通过`AnimationDrawable`类进行控制。例如,一个...
FrameAnimation是Android开发中一种常见的动画形式,主要应用于创建序列帧动画。在Android系统中,开发者可以使用`AnimationDrawable`类来实现帧动画效果。这种动画类型非常适合展示一系列连续的图像,比如游戏中的...
除了基本的补间动画,Android还提供了框架动画(Frame Animation),通过播放一系列图像来模拟动画效果。这通常用于制作简单的序列动画,如loading图标等。在`res/anim`目录下创建一个`frame_animation.xml`文件,...
Drawable Animation / 帧动画 / Frame 动画 English explanation can go to read this article Ⅲ. Property Animation / 属性动画 English explanation can go to read this article Ⅳ. Ripple Effect / Touch ...
Android 动画主要分为两类:Tweened Animation(渐变动画)和Frame-by-Frame Animation(逐帧动画)。这两种动画方式各有特点,可以根据不同的需求选择使用。 Tweened Animation 包括四种基本类型:AlphaAnimation...
AnimationDrawable frameAnimation = (AnimationDrawable) imageView.getBackground(); imageView.post(new Runnable() { @Override public void run() { frameAnimation.start(); } }); ``` 此外,Android还...
Android提供了多种动画机制,包括帧动画(Frame Animation)、补间动画(Tween Animation)、属性动画(Property Animation)。本篇将详细介绍Android中的Animation使用,结合源码分析,以及一些实用工具的运用。 ...
`animation_list`是Android系统提供的一种用于在ImageView中实现帧动画的资源类型,它允许开发者轻松地创建连续播放的图像序列,从而创造出动态效果。本篇文章将深入讲解如何使用`animation_list`来实现ImageView的...
"Animation_Frame_Android_XML"这个主题主要关注如何使用XML来定义逐帧动画,特别是实现WIFI图标的变化效果。逐帧动画是一种常见的动画形式,它通过连续播放一系列静态图像来创造动态视觉效果,类似于传统的电影制作...
AnimationDrawable frameAnimation = (AnimationDrawable) imageView.getBackground(); frameAnimation.start(); // 开始动画 ``` 5. **使用Transition API** 对于更复杂的场景,如在布局变换中移动图片,可以...