Android frame by frame animation动画显示
在看到编写简单的动画的时候,想到了android上也可以做到这一点,只是几个图片来回的切换。这种显示方式学名叫做:frame by frame animation,顺序播放事先做好的图像,跟电影类似;
效果:
res/anim/picture_animation.xml:
main.xml布局文件:
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表示动画循环播放。variablePaddingIf 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()停止当前动画