Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android游戲 >> Android游戲開發 >> Android游戲開發教程之十九:Tween動畫的實現

Android游戲開發教程之十九:Tween動畫的實現

編輯:Android游戲開發

Android游戲開發教程之十九:Tween動畫的實現

  今天和大伙討論一下Android開發中的Tween動畫的實現。首先它和上一章我們討論的Frame動畫同屬於系統提供的繪制動畫的方法。Tween動畫主要的功能是在繪制動畫前設置動畫繪制的軌跡,包括時間, 位置 ,等等。但是Tween動畫的缺點是它只能設置起始點與結束點的兩幀,中間過程全部由系統幫我們完成。所以在幀數比較多的游戲開發中是不太會用到它的。

  Tween一共提供了4中動畫的效果

  Scale:縮放動畫

  Rotate:旋轉動畫

  Translate:移動動畫

  Alpha::透明漸變動畫

  Tween與Frame動畫類似都需要在res\anim路徑下創建動畫的 布局文件

  補充:最近有盆友提問可不可以不用XML配置動畫,希望可以在代碼中配置。那我當然要向大家補充了噢~~~

  1.Scale縮放動畫

Android游戲開發教程之十九:Tween動畫的實現

  <scale>標簽為縮放節點

  android:fromXscale=”1.0″ 表示開始時X軸縮放比例為 1.0 (原圖大小 * 1.0 為原圖大小)

  android:toXscale=”0.0″表示結束時X軸縮放比例為0.0(原圖大小 *0.0 為縮小到看不見)

  android:fromYscale=”1.0″ 表示開始時Y軸縮放比例為 1.0 (原圖大小 * 1.0 為原圖大小)

  android:toYscale=”0.0″表示結束時Y軸縮放比例為0.0(原圖大小 *0.0 為縮小的看不到了)

  android:pivotX=”50%” X軸縮放的位置為中心點

  android:pivotY=”50%” Y軸縮放的位置為中心點

  android:duration=”2000″ 動畫播放時間 這裡是2000毫秒也就是2秒

  這個動畫布局設置動畫從大到小進行縮小。

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <scale xmlns:android="http://schemas.android.com/apk/res/android"  
  3.             android:fromXScale="1.0"  
  4.             android:toXScale="0.0"  
  5.             android:fromYScale="1.0"  
  6.             android:toYScale="0.0"  
  7.             android:pivotX="50%"  
  8.             android:pivotY="50%"  
  9.             android:duration="2000">  
  10. </scale>  

  在代碼中加載動畫

Java代碼
  1. mLitteAnimation =  new ScaleAnimation(0.0f, 1.0f, 0.0f,  1.0f,  
  2.                  Animation.RELATIVE_TO_SELF, 0.5f,  
  3.                  Animation.RELATIVE_TO_SELF, 0.5f);  
  4. mLitteAnimation.setDuration(2000); 

  代碼如下

Java代碼
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.view.View;  
  4. import android.view.View.OnClickListener;  
  5. import android.view.animation.Animation;  
  6. import android.view.animation.AnimationUtils;  
  7. import android.widget.Button;  
  8. import android.widget.ImageView;  
  9.    
  10. public class ScaleActivity extends Activity {  
  11.    
  12.     /**縮小動畫按鈕**/  
  13.     Button mButton0 = null;  
  14.    
  15.     /**放大動畫按鈕**/  
  16.     Button mButton1 = null;  
  17.    
  18.     /**顯示動畫的ImageView**/  
  19.     ImageView mImageView = null;  
  20.    
  21.     /**縮小動畫**/  
  22.     Animation mLitteAnimation = null;  
  23.    
  24.     /**放大動畫**/  
  25.     Animation mBigAnimation = null;   
  26.    
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.     super.onCreate(savedInstanceState);  
  30.     setContentView(R.layout.scale);  
  31.    
  32.     /**拿到ImageView對象**/  
  33.     mImageView = (ImageView)findViewById(R.id.imageView);  
  34.    
  35.     /**加載縮小與放大動畫**/  
  36.     mLitteAnimation = AnimationUtils.loadAnimation(this, R.anim.scalelitte);  
  37.     mBigAnimation = AnimationUtils.loadAnimation(this, R.anim.scalebig);  
  38.    
  39.     mButton0 = (Button)findViewById(R.id.button0);  
  40.     mButton0.setOnClickListener(new OnClickListener() {  
  41.    
  42.         @Override  
  43.         public void onClick(View arg0) {  
  44.    
  45.         /**播放縮小動畫**/  
  46.         mImageView.startAnimation(mLitteAnimation);  
  47.    
  48.         }  
  49.     });  
  50.    
  51.     mButton1 = (Button)findViewById(R.id.button1);  
  52.     mButton1.setOnClickListener(new OnClickListener() {  
  53.    
  54.         @Override  
  55.         public void onClick(View arg0) {  
  56.         /**播放放大動畫**/  
  57.         mImageView.startAnimation(mBigAnimation);  
  58.         }  
  59.     });  
  60.     }  
  61. }  

  2.Rotate旋轉動畫

Android游戲開發教程之十九:Tween動畫的實現

  <rotate>標簽為旋轉節點

  Tween一共為我們提供了3種動畫渲染模式。

  android:interpolator=”@android:anim/accelerate_interpolator” 設置動畫渲染器為加速動畫(動畫播放中越來越快)

  android:interpolator=”@android:anim/decelerate_interpolator” 設置動畫渲染器為減速動畫(動畫播放中越來越慢)

  android:interpolator=”@android:anim/accelerate_decelerate_interpolator” 設置動畫渲染器為先加速在減速(開始速度最快 逐漸減慢)

  如果不寫的話 默認為勻速運動

  android:fromDegrees=”+360″設置動畫開始的角度

  android:toDegrees=”0″設置動畫結束的角度

  這個動畫布局設置動畫將向左做360度旋轉加速運動。

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <rotate xmlns:android="http://schemas.android.com/apk/res/android"  
  3.         android:interpolator="@android:anim/accelerate_interpolator"  
  4.         android:fromDegrees="+360"  
  5.         android:toDegrees="0"  
  6.         android:pivotX="50%"  
  7.         android:pivotY="50%"  
  8.         android:duration="2000"  
  9. />  

  在代碼中加載動畫

Java代碼
  1. mLeftAnimation = new RotateAnimation(360.0f, 0.0f,  
  2.     Animation.RELATIVE_TO_SELF, 0.5f,  
  3.     Animation.RELATIVE_TO_SELF, 0.5f);  
  4. mLeftAnimation.setDuration(2000);  

  代碼實現

Java代碼
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.view.View;  
  4. import android.view.View.OnClickListener;  
  5. import android.view.animation.Animation;  
  6. import android.view.animation.AnimationUtils;  
  7. import android.widget.Button;  
  8. import android.widget.ImageView;  
  9.    
  10. public class RotateActivity extends Activity {  
  11.    
  12.     /**向左旋轉動畫按鈕**/  
  13.     Button mButton0 = null;  
  14.    
  15.     /**向右旋轉動畫按鈕**/  
  16.     Button mButton1 = null;  
  17.    
  18.     /**顯示動畫的ImageView**/  
  19.     ImageView mImageView = null;  
  20.    
  21.     /**向左旋轉動畫**/  
  22.     Animation mLeftAnimation = null;  
  23.    
  24.     /**向右旋轉動畫**/  
  25.     Animation mRightAnimation = null;   
  26.    
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.     super.onCreate(savedInstanceState);  
  30.     setContentView(R.layout.retate);  
  31.    
  32.     /**拿到ImageView對象**/  
  33.     mImageView = (ImageView)findViewById(R.id.imageView);  
  34.    
  35.     /**加載向左與向右旋轉動畫**/  
  36.     mLeftAnimation = AnimationUtils.loadAnimation(this, R.anim.retateleft);  
  37.     mRightAnimation = AnimationUtils.loadAnimation(this, R.anim.retateright);  
  38.    
  39.     mButton0 = (Button)findViewById(R.id.button0);  
  40.     mButton0.setOnClickListener(new OnClickListener() {  
  41.    
  42.         @Override  
  43.         public void onClick(View arg0) {  
  44.    
  45.         /**播放向左旋轉動畫**/  
  46.         mImageView.startAnimation(mLeftAnimation);  
  47.    
  48.         }  
  49.     });  
  50.    
  51.     mButton1 = (Button)findViewById(R.id.button1);  
  52.     mButton1.setOnClickListener(new OnClickListener() {  
  53.    
  54.         @Override  
  55.         public void onClick(View arg0) {  
  56.         /**播放向右旋轉動畫**/  
  57.         mImageView.startAnimation(mRightAnimation);  
  58.         }  
  59.     });  
  60.     }  
  61. }  

  3.Translate移動動畫

Android游戲開發教程之十九:Tween動畫的實現

  <translate>標簽為移動節點

  android:repeatCount=”infinite” 設置動畫為循環播放,這裡可以寫具體的int數值,設置動畫播放幾次,但是它記錄次數是從0開始數的,比如這裡設置為2 那麼動畫從0開始數數0 、1、 2 、實際上是播放了3次。

  剩下的幾個標簽上面已經介紹過了。

  這個動畫布局設置動畫從左到右(0.0),從上到下(320,480)做勻速移動。

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <translate  xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:fromXDelta="0"  
  4.     android:toXDelta="320"  
  5.     android:fromYDelta="0"  
  6.     android:toYDelta="480"  
  7.     android:duration="2000"  
  8.     android:repeatCount="infinite"  
  9. />  

  在代碼中加載動畫

Java代碼
  1. mAnimation = new TranslateAnimation(0, 320, 0, 480);  
  2. mAnimation.setDuration(2000);  

  代碼實現

Java代碼
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.view.animation.Animation;  
  4. import android.view.animation.AnimationUtils;  
  5. import android.widget.ImageView;  
  6.    
  7. public class TranslateActivity extends Activity {  
  8.     /**顯示動畫的ImageView**/  
  9.     ImageView mImageView = null;  
  10.    
  11.     /**移動動畫**/  
  12.     Animation mAnimation = null;  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {  
  15.     super.onCreate(savedInstanceState);  
  16.     setContentView(R.layout.translate);  
  17.    
  18.     /**拿到ImageView對象**/  
  19.     mImageView = (ImageView)findViewById(R.id.imageView);  
  20.    
  21.     /**加載移動動畫**/  
  22.     mAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);  
  23.    
  24.     /**播放移動動畫**/  
  25.     mImageView.startAnimation(mAnimation);  
  26.     }  
  27. }  

  4 .Alpha:透明漸變動畫

Android游戲開發教程之十九:Tween動畫的實現

  <alpha>標簽為alpha透明度節點

  android:fromAlpha=”1.0″ 設置動畫起始透明度為1.0 表示完全不透明

  android:toAlpha=”0.0″設置動畫結束透明度為0.0 表示完全透明

  也就是說alpha的取值范圍為0.0 – 1.0 之間

  這個動畫布局設置動畫從完全不透明漸變到完全透明。

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <alpha  xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:fromAlpha="1.0"  
  4.     android:toAlpha="0.0"  
  5.     android:repeatCount="infinite"  
  6.     android:duration="2000">  
  7. </alpha>  

  在代碼中加載動畫

Java代碼
  1. mAnimation = new AlphaAnimation(1.0f, 0.0f);  
  2. mAnimation.setDuration(2000);  

  代碼實現

Java代碼
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.view.animation.Animation;  
  4. import android.view.animation.AnimationUtils;  
  5. import android.widget.ImageView;  
  6.    
  7. public class AlphaActivity extends Activity {  
  8.     /**顯示動畫的ImageView**/  
  9.     ImageView mImageView = null;  
  10.    
  11.     /**透明動畫**/  
  12.     Animation mAnimation = null;  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {  
  15.     super.onCreate(savedInstanceState);  
  16.     setContentView(R.layout.translate);  
  17.    
  18.     /**拿到ImageView對象**/  
  19.     mImageView = (ImageView)findViewById(R.id.imageView);  
  20.    
  21.     /**加載透明動畫**/  
  22.     mAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);  
  23.    
  24.     /**播放透明動畫**/  
  25.     mImageView.startAnimation(mAnimation);  
  26.     }  
  27. }  

  5.綜合動畫

Android游戲開發教程之十九:Tween動畫的實現

  可以將上面介紹的4種動畫設置在一起同時進行播放,那麼就須要使用<set>標簽將所有須要播放的動畫放在一起。

  這個動畫布局設置動畫同時播放移動、漸變、旋轉。

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <rotate  
  4.         android:interpolator="@android:anim/accelerate_interpolator"  
  5.         android:fromDegrees="+360"  
  6.         android:toDegrees="0"  
  7.         android:pivotX="50%"  
  8.         android:pivotY="50%"  
  9.         android:duration="2000"  
  10.         android:repeatCount="infinite"  
  11.     />  
  12.     <alpha  android:fromAlpha="1.0"  
  13.     android:toAlpha="0.0"  
  14.     android:repeatCount="infinite"  
  15.     android:duration="2000">  
  16.     </alpha>  
  17.  <translate  
  18.     android:fromXDelta="0"  
  19.     android:toXDelta="320"  
  20.     android:fromYDelta="0"  
  21.     android:toYDelta="480"  
  22.     android:duration="2000"  
  23.     android:repeatCount="infinite"  
  24. />  
  25. </set>  

  代碼實現

Java代碼
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.view.animation.Animation;  
  4. import android.view.animation.AnimationUtils;  
  5. import android.widget.ImageView;  
  6.    
  7. public class AllActivity extends Activity {  
  8.     /**顯示動畫的ImageView**/  
  9.     ImageView mImageView = null;  
  10.    
  11.     /**綜合動畫**/  
  12.     Animation mAnimation = null;  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {  
  15.     super.onCreate(savedInstanceState);  
  16.     setContentView(R.layout.translate);  
  17.    
  18.     /**拿到ImageView對象**/  
  19.     mImageView = (ImageView)findViewById(R.id.imageView);  
  20.    
  21.     /**加載綜合動畫**/  
  22.     mAnimation = AnimationUtils.loadAnimation(this, R.anim.all);  
  23.    
  24.     /**播放綜合動畫**/  
  25.     mImageView.startAnimation(mAnimation);  
  26.     }  
  27. }  

  源碼下載地址:http://vdisk.weibo.com/s/aamcS

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