Android 动画

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

  android Frame动画概述+示例
       2.jpg
2010-12-13 18:50 上传
下载附件 (6.76 KB)

  android Frame动画概述+示例
       3.jpg
2010-12-13 18:50 上传
下载附件 (6.27 KB)

  android Frame动画概述+示例
       4.jpg
2010-12-13 18:50 上传
下载附件 (6.8 KB)

  android Frame动画概述+示例

  
Activity01
  Java代码 
  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);



  }



  }



  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
  Java代码 
  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;



  }



  }



  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;



  }



  }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值