Frame-by-frame animation实例

Frame-by-frame Animation可以在XML Resource定义(存放到res/anim文件夹下,也可以存放在res/drawable文件夹下(Android文档就是这样说的)),也可以使 用AnimationDrawable中的API定义。由于Tween Animation与Frame-by-frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation- list根节点中包含多个item子节点,每个item节点定义一帧动画:当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:

XML属性说明
drawable当前帧引用的drawable资源
duration当前帧显示的时间(毫秒为单位)
oneshot如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播 放。
variablePaddingIf true, allows the drawable’s padding to change based on the current state that is selected.
visible规定drawable的初始可见性,默认为flase;

 

动画文件animation.xml为:

[xhtml]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">  
  3.     <item android:drawable="@drawable/appwidget_clock_dial" android:duration="2000"></item>  
  4.     <item android:drawable="@drawable/clockdroid2_dial" android:duration="2000"></item>  
  5.     <item android:drawable="@drawable/clockdroids_dial" android:duration="2000"></item>  
  6.     <item android:drawable="@drawable/clockgoog_dial" android:duration="2000"></item>  
  7. </animation-list>  

主文件FrameAnimation.java为:

[java]  view plain copy
  1. package com.android.animation;  
  2. import android.app.Activity;  
  3. import android.graphics.drawable.AnimationDrawable;  
  4. import android.os.Bundle;  
  5. import android.view.MotionEvent;  
  6. import android.widget.ImageView;  
  7. public class FrameAnimation extends Activity {  
  8.     AnimationDrawable frameAnimation = new AnimationDrawable();  
  9.     /** Called when the activity is first created. */  
  10.     @Override  
  11.     public void onCreate(Bundle savedInstanceState) {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.main);  
  14.         ImageView imageView = (ImageView) findViewById(R.id.imageview);  
  15.         imageView.setBackgroundResource(R.anim.animation);  
  16.         frameAnimation = (AnimationDrawable)imageView.getBackground();  
  17.     }  
  18.     @Override  
  19.     public boolean onTouchEvent(MotionEvent event) {  
  20.         if(event.getAction() == MotionEvent.ACTION_DOWN) {  
  21.             frameAnimation.start();  
  22.         }  
  23.         return super.onTouchEvent(event);  
  24.     }  
  25.       
  26. }  

 

几点说明:

  1. animation.xml中<?xml version="1.0" encoding="utf-8"?>是必不可少的,它标识版本号和编码类型。
  2. animation.xml中xmlns:android="http://schemas.android.com/apk/res/android"也是必不可少的,缺失会提示“Error parsing XML: unbound prefix ”的错误。它指定正确的namespace。
  3. 与Tween animation的动画文件相比,在<animation-list></animation-list>标签外面少了<set></set>标签,如果加上程序不能运行。<set>: A container that can recursively hold itself or other animations.You can include as many child elements of the same or different types as you like.关于资源方面的详细标签介绍参考file:///work/android-sdk-linux_x86-1.6_r1/docs/guide/topics/resources/available-resources.html。里面有动画标签的详细说明。
  4. 启动Frame-by-frame Animation动画的代码FrameAnimation.start();不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值