天天看點

Android Animation 用法解析

Android Animation用法解析

Android 通過Animation類可以實作動畫效果.Animation包括兩種效果模式:

1. Tween Animation:漸變動畫,通過對操作的對象進行相關的做圖像變換(平移、縮放、旋轉)産生動畫效果;

2. Frame Animation:幀動畫,通過順序播放已準備好的圖像而産生的動畫效果。

一、       TweenAnimation

XML 效果 Java
alpha 漸變透明度動畫效果 AlphaAnimation
scale 漸變尺寸伸縮動畫效果 ScaleAnimation
translate 畫面轉換位置移動動畫效果 TranslateAnimation
rotate 畫面轉移旋轉動畫效果 RotateAnimation

1.  建立Animation動畫效果

在項目工程中,一般在res目錄下建立一個anim目錄,該目錄放置Animation相關的xml檔案。

如:my_animation.xml

<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
 <alpha/>
 <scale/>
 <translate/>
 <rotate/>
</set>
           

Java中調用定義的xml

public static Animation loadAnimation(Context context, int id)
//第一個參數Context為程式的上下文   
//第二個參數id為動畫XML檔案的引用
//例子:
myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_animation);
//使用AnimationUtils類的靜态方法loadAnimation()來加載XML中的動畫XML檔案
           

2.XML執行個體講解各個動畫效果

2.1. alpha

<?xml version="1.0" encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="2000"
/>
<!--漸變透明度動畫效果alpha
        浮點型值:
            fromAlpha 屬性為動畫起始時透明度
            toAlpha   屬性為動畫結束時透明度
            說明:
                0.0表示完全透明
                1.0表示完全不透明
            以上值取0.0-1.0之間的float資料類型的數字
       
        長整型值:
            duration  屬性為動畫持續時間
            說明:    
                時間以毫秒為機關
-->
</set>
           

2.2. scale

<?xmlversion="1.0" encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
   <scale 
          android:interpolator=
                    "@android:anim/accelerate_decelerate_interpolator"
          android:fromXScale="0.0"
          android:toXScale="1.4"
          android:fromYScale="0.0"
          android:toYScale="1.4"
          android:pivotX="50%"
          android:pivotY="50%"
          android:fillAfter="false"
          android:duration="1000"/>
</set>
<!--漸變尺寸伸縮動畫效果scale
       屬性:interpolator 指定一個動畫的插入器
       有三種動畫插入器:
           accelerate_decelerate_interpolator 加速-減速動畫插入器
            accelerate_interpolator        加速-動畫插入器
            decelerate_interpolator        減速- 動畫插入器
      浮點型值:
            fromXScale 屬性為動畫起始時 X坐标上的伸縮尺寸   
            toXScale   屬性為動畫結束時 X坐标上的伸縮尺寸    
            fromYScale 屬性為動畫起始時Y坐标上的伸縮尺寸   
            toYScale   屬性為動畫結束時Y坐标上的伸縮尺寸   
       
            說明:
                 以上四種屬性值   
                    0.0表示收縮到沒有
                    1.0表示正常無伸縮    
                    值小于1.0表示收縮 
                    值大于1.0表示放大
            pivotX     屬性為動畫相對于物件的X坐标的開始位置
            pivotY     屬性為動畫相對于物件的Y坐标的開始位置
            說明:
                    以上兩個屬性值從0%-100%中取值
                    50%為物件的X或Y方向坐标上的中點位置
       
        長整型值:
            duration  屬性為動畫持續時間
            說明:   時間以毫秒為機關
 
        布爾型值:
            fillAfter 屬性當設定為true ,該動畫轉化在動畫結束後被應用
-->
           

2.3translate

<?xmlversion="1.0" encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="-100"
android:fromYDelta="30"
android:toYDelta="100"
android:duration="2000"
/>
<!--畫面轉換位置移動動畫效果translate
        整型值:
            fromXDelta 屬性為動畫起始時 X坐标上的位置   
            toXDelta   屬性為動畫結束時 X坐标上的位置
            fromYDelta 屬性為動畫起始時 Y坐标上的位置
            toYDelta   屬性為動畫結束時 Y坐标上的位置
            注意:
                     沒有指定fromXType toXType fromYType toYType 時候,
                     預設是以自己為相對參照物            
        長整型值:
            duration  屬性為動畫持續時間
            說明:   時間以毫秒為機關
-->
</set>
           

2.4. rotate

<?xmlversion="1.0" encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<rotate
       android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromDegrees="0"
        android:toDegrees="+350"        
        android:pivotX="50%"
        android:pivotY="50%"    
        android:duration="3000"/> 
<!--畫面轉移旋轉動畫效果rotate
       屬性:interpolator 指定一個動畫的插入器
             有三種動畫插入器:
               accelerate_decelerate_interpolator  加速-減速動畫插入器
                accelerate_interpolator               加速-動畫插入器
                decelerate_interpolator               減速- 動畫插入器
          
       浮點數型值:
            fromDegrees 屬性為動畫起始時物件的角度   
            toDegrees   屬性為動畫結束時物件旋轉的角度可以大于360度   
            說明:
                     當角度為負數——表示逆時針旋轉
                     當角度為正數——表示順時針旋轉             
                     (負數from——to正數:順時針旋轉)  
                     (負數from——to負數:逆時針旋轉)
                     (正數from——to正數:順時針旋轉)
                     (正數from——to負數:逆時針旋轉)      
 
            pivotX     屬性為動畫相對于物件的X坐标的開始位置
            pivotY     屬性為動畫相對于物件的Y坐标的開始位置
            說明:       以上兩個屬性值從0%-100%中取值
                         50%為物件的X或Y方向坐标上的中點位置
 
        長整型值:
            duration  屬性為動畫持續時間
            說明:      時間以毫秒為機關
-->
</set>
           

3.     Java代碼實作動畫效果

//在代碼中定義動畫執行個體對象
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;
   
    //根據各自的構造方法來初始化一個執行個體對象
 
/*
*參數1:fromAlpha為動畫開始時候透明度
*參數2:toAlpha為動畫結束時候透明度
*/
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
 
/*
*參數1:fromX為動畫起始時 X坐标上的伸縮尺寸
*參數2:toX為動畫結束時 X坐标上的伸縮尺寸
*參數3:fromY為動畫起始時Y坐标上的伸縮尺寸
*參數4:toY為動畫結束時Y坐标上的伸縮尺寸
*參數5:pivotXType為動畫在X軸相對于物件位置類型
*參數6:pivotXValue為動畫相對于物件的X坐标的開始位置
*參數7:pivotXType為動畫在Y軸相對于物件位置類型
*參數8:pivotYValue為動畫相對于物件的Y坐标的開始位置
*/
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
   Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
/*
*參數1:fromXDelta為動畫起始時 X坐标上的移動位置
*參數2:toXDelta為動畫結束時 X坐标上的移動位置 
*參數3:fromYDelta為動畫起始時Y坐标上的移動位置
*參數4:toYDelta為動畫結束時Y坐标上的移動位置
*/
myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f,300.0f);
 
/*
*參數1:fromDegrees為動畫起始時的旋轉角度   
*參數2:toDegrees為動畫旋轉到的角度  
*參數3:pivotXType為動畫在X軸相對于物件位置類型 
*參數4:pivotXValue為動畫相對于物件的X坐标的開始位置
*參數5:pivotXType為動畫在Y軸相對于物件位置類型  
*參數6:pivotYValue為動畫相對于物件的Y坐标的開始位置
*/
myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
        Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
           

4.常用的Animation執行個體

4.1.push_left_in.xml —— 左進漸變效果

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android" >  
    <translate  
        android:duration="1500"  
        android:fromXDelta="100%p"  
        android:toXDelta="0" />  
  
    <alpha  
        android:duration="1500"  
        android:fromAlpha="0.1"  
        android:toAlpha="1.0" />  
</set>  
           

4.2.push_left_out.xml  —— 右出漸變效果

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android" >  
    <translate  
        android:duration="1500"  
        android:fromXDelta="0"  
        android:toXDelta="-100%p" />  
  
    <alpha  
        android:duration="1500"  
        android:fromAlpha="1.0"  
        android:toAlpha="0.1" />  
</set>
           

4.3.push_right_in.xml  —— 右進漸變效果

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android" >  
    <translate  
        android:duration="1500"  
        android:fromXDelta="-100%p"  
        android:toXDelta="0" />  
  
    <alpha  
        android:duration="1500"  
        android:fromAlpha="0.1"  
        android:toAlpha="1.0" />  
</set>  
           

4.4.push_right_out.xml  —— 右出漸變效果

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android" >  
    <translate  
        android:duration="1500"  
        android:fromXDelta="0"  
        android:toXDelta="100%p" />  
  
    <alpha  
        android:duration="1500"  
        android:fromAlpha="1.0"  
        android:toAlpha="0.1" />  
</set> 
           

其中,android:duration表示漸變持續時間;translate表示位移變換;alpha表示透明度變換

translate

android:fromXDelta="-100%p"   android:toXDelta="0" 表示圖檔從左進入,從不可見到可見

android:fromXDelta="0" android:toXDelta="100%p"     表示圖檔從右滑出,從可見到不可見

alpha

android:fromAlpha="1.0"  android:toAlpha="0.1" 表示圖檔從不透明(1.0)到透明(0.1)

android:fromAlpha="0.1"  android:toAlpha="1.0" 表示圖檔從透明(0.1)到不透明(1.0)