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









Activity01

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



GameView

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

更多相关文章

  1. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  2. 一款霸榜 GitHub 的开源 Linux 资源监视器!
  3. android截图事件监听
  4. Android之最简单的ImageView加边框方法
  5. 图解Android:Touch事件传递机制
  6. Android(安卓)gallery 3D效果
  7. Android官方数据绑定框架DataBinding
  8. Android事件分发机制及源码分析
  9. Android的五大基本组件

随机推荐

  1. Android一些网站介绍
  2. Android(安卓)Initialization Process
  3. Android(安卓)Timer 更好方法
  4. android使用gridview的书架效果
  5. Android应用程序组件Content Provider在
  6. android腾讯微博吹一吹实现原理
  7. Android(安卓)Manifest之元素中文注释
  8. Android选项卡(TabWidget)应用
  9. Android(安卓)JNI char* 和jstring类型相
  10. Android6.0 Fix launcher3 crash when se