AnimationDrawable

来源:互联网 发布:通达信金融炒股软件 编辑:程序博客网 时间:2024/05/17 03:30

大家平时见到的最多的可能就是Frame动画了,Android中当然也少不了它。它的使用更加简单,只需要创建一个

AnimationDrawabledF对象来表示Frame动画,然后通过addFrame 方法把每一帧要显示的内容添加进去,最后通过start 方法就可

以播放这个动画了,同时还可以通过 setOneShot方法设置是否重复播放。

 

  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. }  
[java] view plaincopy
  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.getPackag eName());   
  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.     }   
  67. }  
原创粉丝点击