1. 程式人生 > >在安卓中使用AnimationSet類同時執行多種動畫效果

在安卓中使用AnimationSet類同時執行多種動畫效果

在安卓開發中,AnimationSet允許一個介面元件同時執行多種動畫效果,例如一邊旋轉,一邊移動,同時縮放尺寸。

而AnimationSet類本身是Animation類的子類,而Animation類則是用於實現基礎動畫效果的。

其實用AnimationSet同時執行多種動畫效果特別簡單,這個類顧名思義,就是多個Animation例項的一個集合,直接看程式碼:

/**
 * 一次執行所有的動畫效果
 * @param view
 */
public void executeAllAnimations(View view){
    /*
     *  建立一個AnimationSet,它能夠同時執行多個動畫效果
     *  構造方法的入參如果是“true”,則代表使用預設的interpolator,如果是“false”則代表使用自定義interpolator
     */
    AnimationSet animationSet = new AnimationSet(true);

    /*
     *  建立一個半透明效果的動畫物件,效果從完全透明到完全不透明
     */
    AlphaAnimation alphaAnimation = new AlphaAnimation(0,1);

    /*
     *  設定動畫的持續時間
     */
    alphaAnimation.setDuration(3000);

    /*
     *  建立一個旋轉動畫物件
     *  入參列表含義如下:
     *  1.fromDegrees:從哪個角度開始旋轉
     *  2.toDegrees:旋轉到哪個角度結束
     *  3.pivotXType:旋轉所圍繞的圓心的x軸座標的型別,有ABSOLUT絕對座標、RELATIVE_TO_SELF相對於自身座標、RELATIVE_TO_PARENT相對於父控制元件的座標
     *  4.pivotXValue:旋轉所圍繞的圓心的x軸座標,0.5f表明是以自身這個控制元件的一半長度為x軸
     *  5.pivotYType:y軸座標的型別
     *  6.pivotYValue:y軸座標
     */
    RotateAnimation rotateAnimation = new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

    /*
     *  設定動畫的持續時間
     */
    rotateAnimation.setDuration(3000);

    /*
     *  建立一個縮放效果的動畫
     *  入參列表含義如下:
     *  fromX:x軸的初始值
     *  toX:x軸縮放後的值
     *  fromY:y軸的初始值
     *  toY:y軸縮放後的值
     *  pivotXType:x軸座標的型別,有ABSOLUT絕對座標、RELATIVE_TO_SELF相對於自身座標、RELATIVE_TO_PARENT相對於父控制元件的座標
     *  pivotXValue:x軸的值,0.5f表明是以自身這個控制元件的一半長度為x軸
     *  pivotYType:y軸座標的型別
     *  pivotYValue:軸的值,0.5f表明是以自身這個控制元件的一半長度為y軸
     */
    ScaleAnimation scaleAnimation = new ScaleAnimation(0,0.1f,0,0.1f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

    /*
     *  設定動畫的持續時間
     */
    scaleAnimation.setDuration(3000);


    /*
     *  建立一個移動動畫效果
     *  入參的含義如下:
     *  fromXType:移動前的x軸座標的型別
     *  fromXValue:移動前的x軸的座標
     *  toXType:移動後的x軸的座標的型別
     *  toXValue:移動後的x軸的座標
     *  fromYType:移動前的y軸的座標的型別
     *  fromYValue:移動前的y軸的座標
     *  toYType:移動後的y軸的座標的型別
     *  toYValue:移動後的y軸的座標
     */
    TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0.5f);

    /*
     *  設定動畫的持續時間
     */
    translateAnimation.setDuration(3000);

    /*
     *  將四種動畫效果放入同一個AnimationSet中
     */
    animationSet.addAnimation(alphaAnimation);
    animationSet.addAnimation(rotateAnimation);
    animationSet.addAnimation(scaleAnimation);
    animationSet.addAnimation(translateAnimation);

    /*
     *  同時執行多個動畫效果
     */
    view.startAnimation(animationSet);
}