`

【转】android Frame动画概述+示例

 
阅读更多

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









Activity01

Java代码  收藏代码
  1. package  xiaohang.zhimeng;  
  2.   
  3. import  android.app.Activity;  
  4. import  android.os.Bundle;  
  5. import  android.view.KeyEvent;  
  6. import  android.view.Window;  
  7. import  android.view.WindowManager;  
  8.   
  9. public   class  Activity01  extends  Activity {  
  10.     private  GameView mGameView;  
  11.   
  12.     @Override   
  13.     public   void  onCreate(Bundle savedInstanceState) {  
  14.         super .onCreate(savedInstanceState);  
  15.         // 设置无标题栏   
  16.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  17.         // 设置为全屏模式   
  18.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  19.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  20.   
  21.         mGameView = new  GameView( this );  
  22.   
  23.         setContentView(mGameView);  
  24.     }  
  25.   
  26.     public   boolean  onKeyUp( int  keyCode, KeyEvent event) {  
  27.         if  (mGameView ==  null ) {  
  28.             return   false ;  
  29.         }  
  30.         mGameView.onKeyUp(keyCode, event);  
  31.         return   true ;  
  32.     }  
  33.   
  34.     public   boolean  onKeyDown( int  keyCode, KeyEvent event) {  
  35.         if  (mGameView ==  null ) {  
  36.             return   false ;  
  37.         }  
  38.         if  (keyCode == KeyEvent.KEYCODE_BACK) {  
  39.             // 关闭Activity   
  40.             this .finish();  
  41.             return   true ;  
  42.         }  
  43.         return   super .onKeyDown(keyCode, event);  
  44.     }  
  45. }  



GameView

Java代码  收藏代码
  1. package  xiaohang.zhimeng;  
  2.   
  3. import  android.content.Context;  
  4. import  android.graphics.Canvas;  
  5. import  android.graphics.drawable.AnimationDrawable;  
  6. import  android.graphics.drawable.Drawable;  
  7. import  android.view.KeyEvent;  
  8. import  android.view.View;  
  9.   
  10. public   class  GameView  extends  View{  
  11.       
  12.     //定义AnimationDrawable动画   
  13.     private  AnimationDrawable   frameAnimation =  null ;  
  14.     Context                     mContext       = null ;  
  15.       
  16.     //定义一个Drawable对象   
  17.     Drawable                    mBitAnimation  = null ;  
  18.       
  19.     public  GameView(Context context) {  
  20.         super (context);  
  21.           
  22.         mContext = context;  
  23.           
  24.         //实例化AnimationDrawable对象   
  25.         frameAnimation = new  AnimationDrawable();  
  26.           
  27.         /*装载资源*/   
  28.         //这里用一个循环装载所有名字类似的资源   
  29.         //如"a1...........15.png"的图片   
  30.         for ( int  i =  1 ; i <=  15 ; i++){  
  31.             int  id = getResources().getIdentifier( "a"  + i,  "drawable" , mContext.getPackageName());  
  32.             //此方法返回一个可绘制的对象与特定的资源ID相关联    
  33.             mBitAnimation = getResources().getDrawable(id);  
  34.             /*为动画添加一帧*/   
  35.             //参数mBitAnimation是该帧的图片   
  36.             //参数500是该帧显示的时间,按毫秒计算   
  37.             frameAnimation.addFrame(mBitAnimation, 500 );  
  38.         }  
  39.         /*上边用到了Resources的getIdentifier方法 方法返回一个资源的唯一标识符,如果没有这个资源就返回0  
  40.          * 0不是有效的标识符,在说说这个方法几个参数的含义  
  41.          * 第一个 就是我们的资源名称了。  
  42.          * 第二个 就是我们要去哪里找我们的资源 我们的图片在drawable 下 所以为drawable  
  43.          * 第三个 我们用了Context的getPackageName返回应用程序的包名  
  44.          * */   
  45.           
  46.         //设置播放模式是否循环播放,false表示循环,true表示不循环   
  47.         frameAnimation.setOneShot(false );  
  48.           
  49.         //设置本类将要显示的这个动画   
  50.         this .setBackgroundDrawable( frameAnimation );  
  51.     }  
  52.       
  53.     @Override   
  54.     protected   void  onDraw(Canvas canvas) {  
  55.         super .onDraw(canvas);  
  56.     }  
  57.       
  58.     public   boolean  onKeyUp( int  keyCode, KeyEvent event){  
  59.         switch  (keyCode) {  
  60.         case  KeyEvent.KEYCODE_DPAD_UP:  
  61.             //当按手机的上方向键时开始播放   
  62.             frameAnimation.start();  
  63.             break ;  
  64.         }  
  65.         return   true ;  
  66.     }  

原文:http://www.iteye.com/topic/833037
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics