Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 開發入門 >> android Frame動畫概述+示例

android Frame動畫概述+示例

編輯:開發入門

大家平時見到的最多的可能就是Frame動畫了,android中當然也少不了它。它的使用更加簡單,只需要創建一個 AnimationDrawabledF對象來表示Frame動畫,然後通過addFrame 方法把每一幀要顯示的內容添加進去,最後通過start 方法就可以播放這個動畫了,同時還可以通過 setOneShot方法設置是否重復播放。 下面就是一個用Frame動畫模擬日全食的效果。先看看效果。
       
  android Frame動畫概述+示例
       
  android Frame動畫概述+示例
      
  android Frame動畫概述+示例
      
  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;

  }

  }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved