我在网上找 Android动画的时候发现,很多都是我上一篇哪个样子的文章。很少有一帧一帧的动画。请大家不要忘记传统动画。
下面就给个具体的XML例子,来定义一帧一帧的动画:
上面的XML就定义了一个Frame Animation,其包含6帧动画,6帧动画中分别应用了drawable中的6张图片:ball1,ball2,.....ball6 每帧动画持续50毫秒。
然后我们将以上XML保存在res/anim/文件夹下,命名为simple_animation.xml,显示动画的代码:
-
<? xml version ="1.0" encoding ="UTF-8" ?> < LinearLayout android:layout_width ="fill_parent" android:layout_height ="fill_parent" android:orientation ="vertical" xmlns:android ="http://schemas.android.com/apk/res/android" > < ImageView android:id ="@+id/imageView" android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:gravity ="center" android:layout_centerHorizontal ="true" /> < TextView android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="aaaaaaaaaaaaaaaaaaaaa" /> </ LinearLayout >
public class AlarmAlert
extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
ImageView img=(ImageView)findViewById(R.id.imageView);
img.setBackgroundResource(R.anim.simple_animation);
MyAnimationRoutine mar=
new MyAnimationRoutine();
MyAnimationRoutine2 mar2=
new MyAnimationRoutine2();
Timer t=
new Timer(
false);
t.schedule(mar,100);
Timer t2=
new Timer(
false);
t2.schedule(mar2,5000);
}
class MyAnimationRoutine
extends TimerTask{
@Override
public void run(){
ImageView img=(ImageView)findViewById(R.id.imageView);
AnimationDrawable frameAnimation=(AnimationDrawable)
img.getBackground();
frameAnimation.start();
}
}
class MyAnimationRoutine2
extends TimerTask{
@Override
public void run()
{
ImageView img=(ImageView) findViewById(R.id.imageView);
AnimationDrawable frameAnimation=(AnimationDrawable)
img.getBackground();
frameAnimation.stop();
}
}
代码运行的结果6张图片按照顺序的播放一次.有一点需要强调的是:启动Frame Animation动画的不能在OnCreate()中,因为在OnCreate()进行内部控制,所以我建子类,开始和停止方法。不然OnCreate()中启动动画,就只能看到第一张图片。
下面,阅读Android SDK中对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() | 停止当前动画 |
|
获取、设置动画的属性 | |
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() | 停止当前动画 |
本文转自luojinghappy 51CTO博客,原文链接:http://blog.51cto.com/luojinghappy/326048,如需转载请自行联系原作者