Android Tween Animation

 

Android支持动画效果。常见的有Tween Animation和Frame Animation.其中Frame Animation我们在墙面介绍过了,它比较简单。这里来介绍下Tween

 

Tween Animation 常见可以分成四种:

 

ScaleAnimation            :渐变尺寸伸缩效果

AlphaAnimation            :渐变透明度动画效果

TranslateAnimation      :画面转换位置动画效果

RotateAnimation          :画面转移动画效果

 

 

其中,我们可以在代码中直接使用,也可以把Animation做成资源XML文件,从资源中装载。

 

Animation Java Code的使用示例:

package com.rocky.demo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; public class GameView extends View { private Animation mAnimationAlpha=null; private Animation mAnimationScale=null; private Animation mAnimationTranslate=null; private Animation mAnimationRotate=null; private Context mContext=null; Bitmap mBackGroundBitmap=null; int index=0; public GameView(Context context) { super(context); // TODO Auto-generated constructor stub mContext=context; mBackGroundBitmap=((BitmapDrawable)this.getResources().getDrawable(R.drawable.image2)).getBitmap(); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawBitmap(mBackGroundBitmap, 0,0,null); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub switch(keyCode) { case KeyEvent.KEYCODE_DPAD_DOWN: { //mAnimationAlpha=AnimationUtils.loadAnimation(mContext, R.anim.alpha_animation); mAnimationAlpha=new AlphaAnimation(0.1f,1.0f); mAnimationAlpha.setDuration(10000); this.startAnimation(mAnimationAlpha); } break; case KeyEvent.KEYCODE_DPAD_UP: { //mAnimationRotate=AnimationUtils.loadAnimation(mContext, R.anim.rotate_animation); mAnimationRotate=new RotateAnimation(0.0f,+360.0f,Animation.ABSOLUTE,400,Animation.ABSOLUTE,300); mAnimationRotate.setDuration(1000); this.startAnimation(mAnimationRotate); } break; case KeyEvent.KEYCODE_DPAD_LEFT: { //mAnimationScale=AnimationUtils.loadAnimation(mContext, R.anim.scale_animation); mAnimationScale=new ScaleAnimation(0.1f,3.0f,0.1f,3.0f,Animation.RELATIVE_TO_SELF,0.0f,Animation.RELATIVE_TO_SELF,0.5f); mAnimationScale.setDuration(4000); this.startAnimation(mAnimationScale); } break; case KeyEvent.KEYCODE_DPAD_RIGHT: { //mAnimationTranslate=AnimationUtils.loadAnimation(mContext, R.anim.translate_animation); mAnimationTranslate=new TranslateAnimation(0,800,0,600); mAnimationTranslate.setDuration(4000); this.startAnimation(mAnimationTranslate); } break; } return super.onKeyDown(keyCode, event); } }

 

 

Android动画解析 --XML

<alpha>

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <alpha
  4. android:fromAlpha="0.1"
  5. android:toAlpha="1.0"
  6. android:duration="3000"
  7. />
  8. <!-- 透明度控制动画效果 alpha
  9.         浮点型值:
  10.             fromAlpha 属性为动画起始时透明度
  11.             toAlpha   属性为动画结束时透明度
  12.             说明:
  13.                 0.0表示完全透明
  14.                 1.0表示完全不透明
  15.             以上值取0.0-1.0之间的float数据 类型的数字
  16.         
  17.         长整型值:
  18.             duration  属性为动画持续时间
  19.             说明:     
  20.                 时间以毫秒为单位
  21. -->
  22. </set>
复制代码



<scale>

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3.    <scale  
  4.           android:interpolator=
  5.                      "@android:anim/accelerate_decelerate_interpolator"
  6.           android:fromXScale="0.0"
  7.           android:toXScale="1.4"
  8.           android:fromYScale="0.0"
  9.           android:toYScale="1.4"
  10.           android:pivotX="50%"
  11.           android:pivotY="50%"
  12.           android:fillAfter="false"
  13.           android:duration="700" />
  14. </set>
  15. <!-- 尺寸伸缩动画效果 scale
  16.        属性:interpolator 指定一个动画的插入器
  17.         在我试验过程中,使用android.res.anim中的资源 时候发现
  18.         有三种动画插入器:
  19.             accelerate_decelerate_interpolator  加速-减速 动画插入器
  20.             accelerate_interpolator        加速-动画插入器
  21.             decelerate_interpolator        减速- 动画插入器
  22.         其他的属于特定的动画效果
  23.       浮点型值:
  24.          
  25.             fromXScale 属性为动画起始时 X坐标上的伸缩尺寸   
  26.             toXScale   属性为动画结束时 X坐标上的伸缩尺寸     
  27.         
  28.             fromYScale 属性为动画起始时Y坐标上的伸缩尺寸   
  29.             toYScale   属性为动画结束时Y坐标上的伸缩尺寸   
  30.         
  31.             说明:
  32.                  以上四种属性值   
  33.    
  34.                     0.0表示收缩到没有
  35.                     1.0表示正常无伸缩     
  36.                     值小于1.0表示收缩  
  37.                     值大于1.0表示放大
  38.         
  39.             pivotX     属性为动画相对于物件的X坐标的开始位置
  40.             pivotY     属性为动画相对于物件的Y坐标的开始位置
  41.         
  42.             说明:
  43.                     以上两个属性值 从0%-100%中取值
  44.                     50%为物件的X或Y方向坐标上的中点位置
  45.         
  46.         长整型值:
  47.             duration  属性为动画持续时间
  48.             说明:   时间以毫秒为单位
  49.         布尔型值:
  50.             fillAfter 属性 当设置 为true ,该动画转化在动画结束后被应用
  51. -->

<translate>

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <translate
  4. android:fromXDelta="30"
  5. android:toXDelta="-80"
  6. android:fromYDelta="30"
  7. android:toYDelta="300"
  8. android:duration="2000"
  9. />
  10. <!-- translate 位置转移动画效果
  11.         整型值:
  12.             fromXDelta 属性为动画起始时 X坐标上的位置   
  13.             toXDelta   属性为动画结束时 X坐标上的位置
  14.             fromYDelta 属性为动画起始时 Y坐标上的位置
  15.             toYDelta   属性为动画结束时 Y坐标上的位置
  16.             注意:
  17.                      没有指定fromXType toXType fromYType toYType 时候,
  18.                      默认是以自己为相对参照物            
  19.         长整型值:
  20.             duration  属性为动画持续时间
  21.             说明:   时间以毫秒为单位
  22. -->
  23. </set>

<rotate>

  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_decelerate_interpolator"
  5.         android:fromDegrees="0"
  6.         android:toDegrees="+350"         
  7.         android:pivotX="50%"
  8.         android:pivotY="50%"     
  9.         android:duration="3000" />  
  10. <!-- rotate 旋转动画效果
  11.        属性:interpolator 指定一个动画的插入器
  12.              在我试验过程中,使用android.res.anim中的资源时候发现
  13.              有三种动画插入器:
  14.                 accelerate_decelerate_interpolator   加速-减速 动画插入器
  15.                 accelerate_interpolator               加速-动画插入器
  16.                 decelerate_interpolator               减速- 动画插入器
  17.              其他的属于特定的动画效果
  18.                            
  19.        浮点数型值:
  20.             fromDegrees 属性为动画起始时物件的角度   
  21.             toDegrees   属性为动画结束时物件旋转的角度 可以大于360度   
  22.         
  23.             说明:
  24.                      当角度为负数——表示逆时针旋转
  25.                      当角度为正数——表示顺时针旋转              
  26.                      (负数from——to正数:顺时针旋转)   
  27.                      (负数from——to负数:逆时针旋转)
  28.                      (正数from——to正数:顺时针旋转)
  29.                      (正数from——to负数:逆时针旋转)      
  30.             pivotX     属性为动画相对于物件的X坐标的开始位置
  31.             pivotY     属性为动画相对于物件的Y坐标的开始位置
  32.                
  33.             说明:        以上两个属性值 从0%-100%中取值
  34.                          50%为物件的X或Y方向坐标上的中点位置
  35.         长整型值:
  36.             duration  属性为动画持续时间
  37.             说明:       时间以毫秒为单位
  38. -->
  39. </set>

如何使用XML 中的动画效果

  1. public static Animation loadAnimation (Context context, int id)
  2. //第一个参数Context为程序 的上下文   
  3. //第二个参数id为动画XML文件的引用
  4. //例子
  5. myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);
  6. //使用AnimationUtils类的静态方法loadAnimation()来加载 XML中的动画XML文件

 

 

下面给出一个AnimationXml文件的具体内容。

 

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="2000" /> </set>

 

 

scale,rotate,translate等等都是类似的。

 

 

 

你可能感兴趣的:(Android Tween Animation)