【转】android Frame动画概述+示例大家平时见到的最多的可能就是Frame动画了,Android中当然也少不了它。它的
【转】android Frame动画概述+示例
大家平时见到的最多的可能就是Frame动画了,Android中当然也少不了它。它的使用更加简单,只需要创建一个AnimationDrawabledF对象来表示Frame动画,然后通过addFrame 方法把每一帧要显示的内容添加进去,最后通过start 方法就可以播放这个动画了,同时还可以通过 setOneShot方法设置是否重复播放。 下面就是一个用Frame动画模拟日全食的效果。先看看效果。



Activity01
- package?xiaohang.zhimeng;????import?android.content.Context;??import?android.graphics.Canvas;??import?android.graphics.drawable.AnimationDrawable;??import?android.graphics.drawable.Drawable;??import?android.view.KeyEvent;??import?android.view.View;????public?class?GameView?extends?View{????????????//定义AnimationDrawable动画??????private?AnimationDrawable???frameAnimation?=?null;??????Context?????????????????????mContext???????=?null;????????????//定义一个Drawable对象??????Drawable????????????????????mBitAnimation??=?null;????????????public?GameView(Context?context)?{??????????super(context);????????????????????mContext?=?context;????????????????????//实例化AnimationDrawable对象??????????frameAnimation?=?new?AnimationDrawable();????????????????????/*装载资源*/??????????//这里用一个循环装载所有名字类似的资源??????????//如"a1...........15.png"的图片??????????for(int?i?=?1;?i?<=?15;?i++){??????????????int?id?=?getResources().getIdentifier("a"?+?i,?"drawable",?mContext.getPackageName());??????????????//此方法返回一个可绘制的对象与特定的资源ID相关联???????????????mBitAnimation?=?getResources().getDrawable(id);??????????????/*为动画添加一帧*/??????????????//参数mBitAnimation是该帧的图片??????????????//参数500是该帧显示的时间,按毫秒计算??????????????frameAnimation.addFrame(mBitAnimation,?500);??????????}??????????/*上边用到了Resources的getIdentifier方法?方法返回一个资源的唯一标识符,如果没有这个资源就返回0??????????*?0不是有效的标识符,在说说这个方法几个参数的含义??????????*?第一个?就是我们的资源名称了。??????????*?第二个?就是我们要去哪里找我们的资源?我们的图片在drawable?下?所以为drawable??????????*?第三个?我们用了Context的getPackageName返回应用程序的包名??????????*?*/????????????????????//设置播放模式是否循环播放,false表示循环,true表示不循环??????????frameAnimation.setOneShot(false);????????????????????//设置本类将要显示的这个动画??????????this.setBackgroundDrawable(?frameAnimation?);??????}????????????@Override??????protected?void?onDraw(Canvas?canvas)?{??????????super.onDraw(canvas);??????}????????????public?boolean?onKeyUp(int?keyCode,?KeyEvent?event){??????????switch?(keyCode)?{??????????case?KeyEvent.KEYCODE_DPAD_UP:??????????????//当按手机的上方向键时开始播放??????????????frameAnimation.start();??????????????break;??????????}??????????return?true;??????}??}?
