我在网上找 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_height="wrap_content"
android:text="aaaaaaaaaaaaaaaaaaaaa"
</LinearLayout>
Java 代码
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{
public void run()
ImageView img=(ImageView) findViewById(R.id.imageView);
frameAnimation.stop();
}
代码运行的结果6张图片按照顺序的播放一次.有一点需要强调的是:启动Frame Animation动画的不能在OnCreate()中,因为在OnCreate()进行内部控制,所以我建子类,开始和停止方法。不然OnCreate()中启动动画,就只能看到第一张图片。
下面,阅读Android SDK中对AnimationDrawable的介绍,有个简单的了解:
<b>AnimationDrawable</b>
获取、设置动画的属性
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()
停止当前动画
AnimationDrawable
本文转自luojinghappy 51CTO博客,原文链接:http://blog.51cto.com/luojinghappy/326048,如需转载请自行联系原作者