当前位置: 代码迷 >> Android >> android Frame卡通概述+示例
  详细解决方案

android Frame卡通概述+示例

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









Activity01
package xiaohang.zhimeng;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;import android.view.Window;import android.view.WindowManager;public class Activity01 extends Activity {	private GameView mGameView;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		// 设置无标题栏		requestWindowFeature(Window.FEATURE_NO_TITLE);		// 设置为全屏模式		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,				WindowManager.LayoutParams.FLAG_FULLSCREEN);		mGameView = new GameView(this);		setContentView(mGameView);	}	public boolean onKeyUp(int keyCode, KeyEvent event) {		if (mGameView == null) {			return false;		}		mGameView.onKeyUp(keyCode, event);		return true;	}	public boolean onKeyDown(int keyCode, KeyEvent event) {		if (mGameView == null) {			return false;		}		if (keyCode == KeyEvent.KEYCODE_BACK) {			// 关闭Activity			this.finish();			return true;		}		return super.onKeyDown(keyCode, event);	}}


GameView
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;	}}

  
   同样Frame 也可以用xml文件实现,大家去看 api吧。

   源码见附件

1 楼 pansonphy 2010-12-06  
先顶楼主再下代码研究
辛苦了
2 楼 byandby 2010-12-07  
pansonphy 写道
先顶楼主再下代码研究
辛苦了

谢谢捧场,呵呵~
3 楼 7454103 2010-12-08  
图文并茂!
带实例程序!
   注释详细!

就两字:
    给力!

希望还能看到更多的。。。。。。。。。。。。。
4 楼 ganky 2011-01-07  
我运行后黑屏……郁闷
5 楼 King_Bright 2011-01-18  
楼上的,按一下模拟器的向上键就ok了...
6 楼 marrymyy 2011-01-26  
想不到还能以这种方式看日全食,好
7 楼 hantaozu 2011-01-30  
marrymyy 写道
想不到还能以这种方式看日全食,好

谢谢分享!回家写写!O(∩_∩)O~
8 楼 pieerepeng 2011-02-05  
写的太罗嗦了,如果是做一个demo的话,根本不需要自定义view。
而且全屏的帧动画也不是这么干的。
9 楼 eric_shi 2011-02-07  
相当的不错 让想起了美剧《HERO》
10 楼 wafj1984 2011-03-07  
这段代码对我还是很有帮助的
11 楼 h286271819 2011-03-26  
图文并茂!
带实例程序!
   注释详细!

就两字:
    给力!

希望还能看到更多的。。。。。。。。。。。。。
12 楼 苹果超人 2011-05-10  
support!!!!
13 楼 lrh_java 2011-05-16  
可以学习下
14 楼 kissoul 2011-05-17  
初学android,又学到了点儿东西.呵呵.全屏和无标题~
  相关解决方案