動畫效果編程基礎--AnimationAndroid

動畫類型

Androidanimation由四種類型組成

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


JavaCode
AlphaAnimation 漸變透明度動畫效果
ScaleAnimation 漸變尺寸伸縮動畫效果
TranslateAnimation 畫面轉換位置移動動畫效果
RotateAnimation 畫面轉移旋轉動畫效果

Android動畫模式

Animation主要有兩種動畫模式:
一種是tweened animation(漸變動畫)
XML JavaCode
alpha AlphaAnimation
scale ScaleAnimation


一種是frame by frame(畫面轉換動畫)
XML JavaCode
translate TranslateAnimation
rotate RotateAnimation

如何在XML文件中定義動畫

① 打開Eclipse,新建Android工程
② res目錄中新建anim文件夾
③ anim目錄中新建一個myanim.xml(注意文件名小寫)

④ 加入XML的動畫代碼

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

Android動畫解析--XML

<alpha>

    <?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="3000"
    />
    <!-- 透明度控制動畫效果 alpha
            浮點型值:
                fromAlpha 屬性爲動畫起始時透明度
                toAlpha   屬性爲動畫結束時透明度
                說明:
                    0.0表示完全透明
                    1.0表示完全不透明
                以上值取0.0-1.0之間的float數據類型的數字
            
            長整型值:
                duration  屬性爲動畫持續時間
                說明:     
                    時間以毫秒爲單位
    -->
    </set>

<scale>

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns: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="700" />
    </set>
    <!-- 尺寸伸縮動畫效果 scale
           屬性:interpolator 指定一個動畫的插入器
            在我試驗過程中,使用android.res.anim中的資源時候發現
            有三種動畫插入器:
                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 ,該動畫轉化在動畫結束後被應用
    -->

<translate>

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
    android:fromXDelta="30"
    android:toXDelta="-80"
    android:fromYDelta="30"
    android:toYDelta="300"
    android:duration="2000"
    />
    <!-- translate 位置轉移動畫效果
            整型值:
                fromXDelta 屬性爲動畫起始時 X座標上的位置   
                toXDelta   屬性爲動畫結束時 X座標上的位置
                fromYDelta 屬性爲動畫起始時 Y座標上的位置
                toYDelta   屬性爲動畫結束時 Y座標上的位置
                注意:
                         沒有指定fromXType toXType fromYType toYType 時候,
                         默認是以自己爲相對參照物            
            長整型值:
                duration  屬性爲動畫持續時間
                說明:   時間以毫秒爲單位
    -->
    </set>

<rotate>

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns: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 指定一個動畫的插入器
                 在我試驗過程中,使用android.res.anim中的資源時候發現
                 有三種動畫插入器:
                    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>


如何使用XML中的動畫效果

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

複製代碼

如何在Java代碼中定義動畫


    //在代碼中定義 動畫實例對象
    private Animation myAnimation_Alpha;
    private Animation myAnimation_Scale;
    private Animation myAnimation_Translate;
    private Animation myAnimation_Rotate;
       
        //根據各自的構造方法來初始化一個實例對象
    myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);

    myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
                 Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

    myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);

    myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
                   Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);


Android動畫解析--JavaCode


AlphaAnimation

① AlphaAnimation類對象定義


private AlphaAnimation myAnimation_Alpha;

② AlphaAnimation類對象構造


    AlphaAnimation(float fromAlpha, float toAlpha)
    //第一個參數fromAlpha爲 動畫開始時候透明度
    //第二個參數toAlpha爲 動畫結束時候透明度
    myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
    //說明:
    //                0.0表示完全透明
    //                1.0表示完全不透明

③ 設置動畫持續時間


    myAnimation_Alpha.setDuration(5000);
    //設置時間持續時間爲 5000毫秒

ScaleAnimation

① ScaleAnimation類對象定義


private AlphaAnimation myAnimation_Alpha;

② ScaleAnimation類對象構造


    ScaleAnimation(float fromX, float toX, float fromY, float toY,
               int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
    //第一個參數fromX爲動畫起始時 X座標上的伸縮尺寸   
    //第二個參數toX爲動畫結束時 X座標上的伸縮尺寸     
    //第三個參數fromY爲動畫起始時Y座標上的伸縮尺寸   
    //第四個參數toY爲動畫結束時Y座標上的伸縮尺寸  
    /*說明:
                        以上四種屬性值   
                        0.0表示收縮到沒有
                        1.0表示正常無伸縮     
                        值小於1.0表示收縮  
                        值大於1.0表示放大
    */
    //第五個參數pivotXType爲動畫在X軸相對於物件位置類型  
    //第六個參數pivotXValue爲動畫相對於物件的X座標的開始位置
    //第七個參數pivotXType爲動畫在Y軸相對於物件位置類型   
    //第八個參數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);

③ 設置動畫持續時間

    myAnimation_Scale.setDuration(700);
    //設置時間持續時間爲 700毫秒

TranslateAnimation

① TranslateAnimation類對象定義

private AlphaAnimation myAnimation_Alpha;

② TranslateAnimation類對象構造


    TranslateAnimation(float fromXDelta, float toXDelta,
                           float fromYDelta, float toYDelta)
    //第一個參數fromXDelta爲動畫起始時 X座標上的移動位置   
    //第二個參數toXDelta爲動畫結束時 X座標上的移動位置      
    //第三個參數fromYDelta爲動畫起始時Y座標上的移動位置     
    //第四個參數toYDelta爲動畫結束時Y座標上的移動位置 

③ 設置動畫持續時間


    myAnimation_Translate.setDuration(2000);
    //設置時間持續時間爲 2000毫秒

RotateAnimation
① RotateAnimation類對象定義

private AlphaAnimation myAnimation_Alpha;

② RotateAnimation類對象構造


    RotateAnimation(float fromDegrees, float toDegrees,
                int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
    //第一個參數fromDegrees爲動畫起始時的旋轉角度   
    //第二個參數toDegrees爲動畫旋轉到的角度   
    //第三個參數pivotXType爲動畫在X軸相對於物件位置類型  
    //第四個參數pivotXValue爲動畫相對於物件的X座標的開始位置
    //第五個參數pivotXType爲動畫在Y軸相對於物件位置類型   
    //第六個參數pivotYValue爲動畫相對於物件的Y座標的開始位置
    myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
                   Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

③ 設置動畫持續時間

    myAnimation_Rotate.setDuration(3000);
    //設置時間持續時間爲 3000毫秒







發佈了24 篇原創文章 · 獲贊 11 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章