Android一帧一帧的动画

我在网上找 Android动画的时候发现,很多都是我上一篇哪个样子的文章。很少有一帧一帧的动画。请大家不要忘记传统动画。
 
 
下面就给个具体的XML例子,来定义一帧一帧的动画:
上面的XML就定义了一个Frame Animation,其包含6帧动画,6帧动画中分别应用了drawable中的6张图片:ball1,ball2,.....ball6 每帧动画持续50毫秒。

然后我们将以上XML保存在res/anim/文件夹下,命名为simple_animation.xml,显示动画的代码:
  1. <? 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 >
 
 

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{
@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的介绍,有个简单的了解:

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()停止当前动画
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()停止当前动画


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值