1. 程式人生 > >《Android那些事》——清晰理解各個Animation

《Android那些事》——清晰理解各個Animation

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button Alpha_Btn, Scale_Btn, Rotate_Btn, Translate_Btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Alpha_Btn = (Button) findViewById(R.id.alpha);
        Scale_Btn = (Button) findViewById(R.id.scale);
        Rotate_Btn = (Button) findViewById(R.id.rotate);
        Translate_Btn = (Button) findViewById(R.id.translate);

        Alpha_Btn.setOnClickListener(this);
        Scale_Btn.setOnClickListener(this);
        Rotate_Btn.setOnClickListener(this);
        Translate_Btn.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            //淡入淡出
            case R.id.alpha:
                //第一步,建立AnimationSet物件
                AnimationSet animationSet_1 = new AnimationSet(true);
                //第二步,建立相應的動畫
                AlphaAnimation alpha = new AlphaAnimation(1, 0);//從透明度為1到透明度為0
                //第三步,設定動畫執行時間
                alpha.setDuration(2000);
                //第四步,將動畫放入動畫集中
                animationSet_1.addAnimation(alpha);
                //第五步,作用於控制元件之上
                Alpha_Btn.startAnimation(animationSet_1);
                break;

            //縮放
            /**
             * ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
             * float fromX 動畫起始時 X座標上的伸縮尺寸
             * float toX 動畫結束時 X座標上的伸縮尺寸
             * float fromY 動畫起始時Y座標上的伸縮尺寸
             * float toY 動畫結束時Y座標上的伸縮尺寸
             * int pivotXType 中心點x的座標型別  RELATIVE_TO_SELF相對於自己,RELATIVE_TO_PARENT相對於父view
             * float pivotXValue 動畫相對於物件的X座標的開始位置
             * int pivotYType 中心點Y的座標型別  RELATIVE_TO_SELF相對於自己,RELATIVE_TO_PARENT相對於父view
             * float pivotYValue 動畫相對於物件的Y座標的開始位置
             */
            case R.id.scale:
                AnimationSet animationSet_2 = new AnimationSet(true);
                ScaleAnimation scale = new ScaleAnimation(1, 0.1f, 1, 0.1f,
                        Animation.RELATIVE_TO_SELF, 1f, Animation.RELATIVE_TO_SELF,
                        1f);
                scale.setDuration(2000);
                animationSet_2.addAnimation(scale);
                /** 常用方法 */
                //scale.setRepeatCount(int repeatCount);//設定重複次數
                //scale.setFillAfter(boolean);//動畫執行完後是否停留在執行完的狀態
                //scale.setStartOffset(long startOffset);//執行前的等待時間
                Scale_Btn.startAnimation(animationSet_2);
                break;

            //旋轉
            //RotateAnimation (float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
            /**
             * float fromDegrees:旋轉的開始角度。
             * float toDegrees:旋轉的結束角度。
             * int pivotXType:中心點x的座標型別  RELATIVE_TO_SELF相對於自己,RELATIVE_TO_PARENT相對於父view
             * float pivotXValue:X座標的伸縮值。
             * int pivotYType:中心點Y的座標型別  RELATIVE_TO_SELF相對於自己,RELATIVE_TO_PARENT相對於父view
             * float pivotYValue:Y座標的伸縮值。
             */
            case R.id.rotate:
                AnimationSet animationSet_3 = new AnimationSet(true);
                RotateAnimation rotate = new RotateAnimation(0, 360,//從什麼度數到什麼度數
                        Animation.RELATIVE_TO_SELF, 0.5f,//x軸繞著哪個物件旋轉,旋轉的x座標是多少
                        Animation.RELATIVE_TO_SELF, 0.5f);//y軸繞著哪個物件旋轉,旋轉的y座標是多少
                rotate.setDuration(2000);
                animationSet_3.addAnimation(rotate);
                /** 常用方法 */
                //rotate.setRepeatCount(int repeatCount);//設定重複次數
                //rotate.setFillAfter(boolean);//動畫執行完後是否停留在執行完的狀態
                //rotate.setStartOffset(long startOffset);//執行前的等待時間
                Rotate_Btn.startAnimation(animationSet_3);
                break;

            //移動
            //TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
            /**
             * float fromXDelta 動畫開始的點離當前View X座標上的差值
             * float toXDelta 動畫結束的點離當前View X座標上的差值
             * float fromYDelta 動畫開始的點離當前View Y座標上的差值
             * float toYDelta 動畫開始的點離當前View Y座標上的差值
             */
            case R.id.translate:
                AnimationSet animationSet_4 = new AnimationSet(true);
                TranslateAnimation translate = new TranslateAnimation(
                        Animation.RELATIVE_TO_PARENT, 0f,
                        Animation.RELATIVE_TO_PARENT, 1f,
                        Animation.RELATIVE_TO_PARENT, 0f,
                        Animation.RELATIVE_TO_PARENT, 1f);
                translate.setDuration(2000);
                /** 常用方法 */
                //translate.setRepeatCount(int i);//設定重複次數
                //translate.setRepeatMode(Animation.REVERSE);//設定反方向執行
                animationSet_4.addAnimation(translate);
                Translate_Btn.startAnimation(animationSet_4);
                break;
        }
    }