android Tween动画概括+示例

    我们大家都知道android平台提供了两种动画,一种是Tween动画,即通过对场景里的对象不断进行图像变换(平移,缩放,旋转) 来产生动画效果; 第二种就是 Frame 动画,即顺序播放事先做好的图像,和电影类似。 

    首先来分析 Tween动画,Tween动画通过对View 的内容完成一系列的的图形变换(包括平移、缩放、旋转、改变透明度)来实现动画效果。它主要包括以下四种动画效果: 
Alpha: 渐变透明度动画效果 以前也写过一个例子 --> http://byandby.iteye.com/blog/828799  
Scale: 渐变尺寸伸缩动画效果。 
Translate: 画面转移位置移动动画效果 
Rotate: 画面转移旋转动画效果。 

     具体来讲,Tween动画是通过预先定义一组指令,这些指令指定了图形变换的类型、触发时间、持续时间。程序沿着时间线执行这些指令就可以实现动画效果。因此我们首先需要定义Animation动画对象,然后设置该动画的一些属性,最后通过 startAnimation 方法来开始动画。网上的大多数例子都是以 xml文件的形式配置的 我们这里用代码实现一下。其实可能也不难就是参数有些多。下面就介绍 各个动画的属性:  
  
  AlphaAnimation(float fromAlpha, float toAlpha) 
  功能:构建一个渐变透明度动画 
  参数: fromAlpha 为动画起始透明度;toAlpha为动画结束透明度(0.0表示完全透明,1.0表示完全不透明)。 
   
  ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) 
   功能:构建一个渐变尺寸伸缩动画。 
   参数:fromX、toX 分别是起始和结束时X坐标上的伸缩尺寸。fromY、toY分别是起始和结束时 Y坐标上的伸缩尺寸。pivotXValue、pivotYValue 分别为动画相对于物件的X、Y坐标的开始位置  pivotYType pivotXType 分别为x、y的伸缩模式。 

   TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) 
    功能:构建一个画面转换位置移动动画。 
    参数:fromXDelta、fromXDelta分别为起始坐标; toXDelta、toYDelta分别为结束坐标。 

    RotateAnimation(float fromDegress, float toDegress, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) 
    功能:构建一个旋转动画。 
    参数:fromDegress 为开始的角度; toDegress 为结束的角度。 pivotXType、pivotYType分别为x、y 的伸缩模式。pivotXValue、pivotYValue 分别为伸缩动画相对于x、y的坐标的开始位置。 

   setDuration(long durationMillis) 
   功能:设置动画显示的时间  以毫秒为单位。 

   startAnimation(Animation animation) 
   功能:开始播放动画 
   参数:animation为要播放的动画。 
   
   我们下边这个例子 通过 手机的上下左右 来实现这四种动画。 

android Tween动画概括+示例_第1张图片  

android Tween动画概括+示例_第2张图片  

android Tween动画概括+示例_第3张图片  

android Tween动画概括+示例_第4张图片  
  
  Activity01 
Java代码   收藏代码
  1. package xiaohang.zhimeng;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.KeyEvent;  
  6.   
  7. public class Activity01 extends Activity {  
  8.   
  9.     private GameView mGameView;  
  10.   
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.   
  15.         mGameView = new GameView(this);  
  16.   
  17.         setContentView(mGameView);  
  18.     }  
  19.   
  20.     public boolean onKeyUp(int keyCode, KeyEvent event) {  
  21.         if (mGameView == null) {  
  22.             return false;  
  23.         }  
  24.         mGameView.onKeyUp(keyCode, event);  
  25.         return true;  
  26.     }  
  27.   
  28.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  29.         if (mGameView == null) {  
  30.             return false;  
  31.         }  
  32.         if (keyCode == KeyEvent.KEYCODE_BACK) {  
  33.             this.finish();  
  34.             return true;  
  35.         }  
  36.         return super.onKeyDown(keyCode, event);  
  37.     }  
  38. }  


GameView 
Java代码   收藏代码
  1. package xiaohang.zhimeng;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.Canvas;  
  6. import android.graphics.drawable.BitmapDrawable;  
  7. import android.view.KeyEvent;  
  8. import android.view.View;  
  9. import android.view.animation.AlphaAnimation;  
  10. import android.view.animation.Animation;  
  11. import android.view.animation.RotateAnimation;  
  12. import android.view.animation.ScaleAnimation;  
  13. import android.view.animation.TranslateAnimation;  
  14.   
  15. public class GameView extends View{  
  16.       
  17.     //定义Alpha动画  
  18.     private Animation   mAnimationAlpha = null;  
  19.       
  20.     //定义Scale动画  
  21.     private Animation   mAnimationScale = null;  
  22.       
  23.     //定义Translate动画  
  24.     private Animation   mAnimationTranslate = null;  
  25.       
  26.     //定义Rotate动画  
  27.     private Animation   mAnimationRotate    = null;  
  28.       
  29.     //定义Bitmap对象  
  30.     Bitmap  mBitQQ                          = null;  
  31.       
  32.     public GameView(Context context) {  
  33.         super(context);  
  34.           
  35.         //装载资源  
  36.         mBitQQ = ((BitmapDrawable) getResources().getDrawable(R.drawable.xh)).getBitmap();  
  37.     }  
  38.       
  39.     @Override  
  40.     protected void onDraw(Canvas canvas) {  
  41.         super.onDraw(canvas);  
  42.           
  43.         //绘制图片  
  44.         canvas.drawBitmap(mBitQQ, 00null);  
  45.     }  
  46.       
  47.     public boolean onKeyUp(int keyCode, KeyEvent event){  
  48.         switch (keyCode) {  
  49.         case KeyEvent.KEYCODE_DPAD_UP:  
  50.             //创建Alpha动画  
  51.             mAnimationAlpha = new AlphaAnimation(0.1f,1.0f);  
  52.             //设置动画时间  
  53.             mAnimationAlpha.setDuration(3000);  
  54.             //开始播放动画  
  55.             this.startAnimation(mAnimationAlpha);  
  56.             break;  
  57.         case KeyEvent.KEYCODE_DPAD_DOWN:  
  58.             //创建Scal动画  
  59.             mAnimationScale = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,  
  60.                                                  Animation.RELATIVE_TO_SELF, 0.5f,  
  61.                                                  Animation.RELATIVE_TO_SELF, 0.5f  
  62.                                                  );  
  63.             //设置动画的时间  
  64.             mAnimationScale.setDuration(1000);  
  65.             //开始播放动画  
  66.             this.startAnimation(mAnimationScale);  
  67.             break;  
  68.         case KeyEvent.KEYCODE_DPAD_LEFT:  
  69.             //创建Translate动画  
  70.             mAnimationTranslate = new TranslateAnimation(10,100,10100);  
  71.             //设置动画的时间  
  72.             mAnimationTranslate.setDuration(1000);  
  73.             //开始播放动画  
  74.             this.startAnimation(mAnimationTranslate);  
  75.             break;  
  76.         case KeyEvent.KEYCODE_DPAD_RIGHT:  
  77.             //创建Rotate动画  
  78.             mAnimationRotate = new RotateAnimation(0.0f, +360,  
  79.                                                     Animation.RELATIVE_TO_SELF,0.5f,  
  80.                                                     Animation.RELATIVE_TO_SELF,0.5f);  
  81.             //设置动画的时间  
  82.             mAnimationRotate.setDuration(1000);  
  83.             //开始播放动画  
  84.             this.startAnimation(mAnimationRotate);  
  85.             break;  
  86.         }  
  87.         return true;  
  88.     }  
  89.   

你可能感兴趣的:(java,android,null,animation,float,图形)