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(03200480);  
  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

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/game/578.html
2016年5月27日
发布:鸡啄米 分类:Android游戏开发 浏览: 评论:0