在看到编写简单的动画的时候,想到了android上也可以做到这一点,只是几个图片来回的切换。这种显示方式学名叫做:frame by frame animation,顺序播放事先做好的图像,跟电影类似;

效果:


res/anim/picture_animation.xml:
<?xml version="1.0" encoding="utf-8"?><!-- 动画帧集合对象 --><animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"><!--动画帧对象 android:duration表示每帧动画显示的时间,放在drawable下的动画图片不能太大,否则会内存爆掉 --><item android:drawable="@drawable/camp_fire1" android:duration="83" /><item android:drawable="@drawable/camp_fire2" android:duration="83" /><item android:drawable="@drawable/camp_fire3" android:duration="83" /><item android:drawable="@drawable/camp_fire4" android:duration="83" /><item android:drawable="@drawable/camp_fire5" android:duration="83" /><item android:drawable="@drawable/camp_fire6" android:duration="83" /><item android:drawable="@drawable/camp_fire7" android:duration="83" /><item android:drawable="@drawable/camp_fire8" android:duration="83" /><item android:drawable="@drawable/camp_fire9" android:duration="83" /><item android:drawable="@drawable/camp_fire10" android:duration="83" /><item android:drawable="@drawable/camp_fire11" android:duration="83" /><item android:drawable="@drawable/camp_fire12" android:duration="83" /><item android:drawable="@drawable/camp_fire13" android:duration="83" /><item android:drawable="@drawable/camp_fire14" android:duration="83" /><item android:drawable="@drawable/camp_fire15" android:duration="83" /><item android:drawable="@drawable/camp_fire16" android:duration="83" /><item android:drawable="@drawable/camp_fire17" android:duration="83" /></animation-list>


main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><Button android:layout_width="fill_parent"android:layout_height="wrap_content" android:text="start" android:id="@+id/start" /><ImageView android:layout_width="wrap_content"android:layout_height="wrap_content" android:id="@+id/imageId"android:src="@anim/picture_animation" /></LinearLayout>


IaiaiActivity.java类:
package com.iaiai.activity;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;/** *  * <p> * Title: IaiaiActivity.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-7-28 * </p> *  * @author 丸子 * @version 0.0.1 */public class IaiaiActivity extends Activity {private ImageView imageView;private AnimationDrawable draw = null;private Button start;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);this.imageView = (ImageView) findViewById(R.id.imageId);this.draw = (AnimationDrawable) imageView.getDrawable();this.start = (Button) findViewById(R.id.start);this.start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (draw.isRunning()) {draw.stop();start.setText("start");} else {draw.stop();draw.start();start.setText("passe");}}});}}


注:代码运行的结果想必大家应该就知道了(图片按照顺序的播放一次),不过有一点需要强调的是:启动Frame Animation动画的代码rocketAnimation.start(); 不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。

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;


下面,阅读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() 停止当前动画

更多相关文章

  1. android Google Map获取地理位置信息的方法
  2. android api code 学习之provider包
  3. Android应用获取外部盘符时,默认创建Android/data/包名/files目
  4. Android(安卓)实现自定义属性 declare-styleable扩展 方法 &Ecli
  5. Android(安卓)逐帧动画创建实例详解
  6. 自定义Activity间跳转效果
  7. Animation动画概述和执行原理
  8. Toolbar+TabLayout+ViewPager达成Android最优导航栏
  9. Layout_weight的特性

随机推荐

  1. 作为一个Java程序员必须要知道的单元测试
  2. 解决CAS机制中ABA问题的AtomicStampedRef
  3. Java基础系列:线程同步和线程池
  4. ConcurrentHashMap.computeIfAbsent 死循
  5. java多线程(6)sleep和wait的4大区别
  6. SSL 证书选择指南
  7. 一文带你理解java中的同步工具类CountDow
  8. 你应该要理解的java并发关键字volatile
  9. android通过服务实现消息推送
  10. 一个同步工具类CyclicBarrier的详解(干货