1. 程式人生 > >Android的View動畫

Android的View動畫

MainActivity.java
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.BounceInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.imageView);

    }

    public void alpha(View view) {
        //AlphaAnimation 透明動畫
        //第一個引數是開始的透明度,第二個引數是結束的透明度,1.0完全透明,0.0完全透明
        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
        //設定動畫的時間長度
        alphaAnimation.setDuration(2000);
        //設定重複的型別
        alphaAnimation.setRepeatMode(Animation.REVERSE);
        //設定重複的次數
        alphaAnimation.setRepeatCount(2);
        //設定是否停留在最終狀態
        alphaAnimation.setFillAfter(false);
        //讓動畫執行起來
        imageView.startAnimation(alphaAnimation);
    }

    public void rotate(View view) {
        //RotateAnimation 旋轉動畫
        //第一個引數是開始的的角度,第二個引數是結束的角度
        //第三個引數是旋轉中心的X座標型別,Animation.RELATIVE_TO_SELF 表示自身
        //第四個引數是X座標,0.5f表示X的一半
        //第五個引數是旋轉中心的座標型別,Animation.RELATIVE_TO_PARENT 表示父級容器
        //第六個引數是Y座標,0.5f表示X的一半
        RotateAnimation rotateAnimation = new
                RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
        //設定動畫的時間長度
        rotateAnimation.setDuration(2000);
        //設定重複的型別
        rotateAnimation.setRepeatMode(Animation.REVERSE);
        //設定重複的次數
        rotateAnimation.setRepeatCount(2);
        //設定是否停留在最終狀態
        rotateAnimation.setFillAfter(false);
        //讓動畫執行起來
        imageView.startAnimation(rotateAnimation);
    }

    public void scale(View view) {
        //ScaleAnimation 縮放動畫
        //第一個引數和第二個引數是表示X軸從1倍變寬2倍
        //第三個引數和第四個引數是表示軸從1倍變寬2倍
        //第五個引數是中心的X座標型別,Animation.RELATIVE_TO_SELF 表示自身
        //第六個引數是X座標,0.5f表示X的一半
        //第七個引數是中心的座標型別,Animation.RELATIVE_TO_PARENT 表示父級容器
        //第八個引數是Y座標,0.5f表示X的一半
        ScaleAnimation scaleAnimation = new
                ScaleAnimation(1, 2, 1, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
        //設定動畫的時間長度
        scaleAnimation.setDuration(2000);
        //設定重複的型別
        scaleAnimation.setRepeatMode(Animation.REVERSE);
        //設定重複的次數
        scaleAnimation.setRepeatCount(2);
        //設定是否停留在最終狀態
        scaleAnimation.setFillAfter(false);
        //讓動畫執行起來
        imageView.startAnimation(scaleAnimation);
    }

    public void translate(View view) {
        //TranslateAnimation 平移動畫
        //前四個引數是表示X軸父級容器的-0.5平移到父級容器的0.5
        //後四個引數是表示Y軸父級容器的-0.5平移到父級容器的0.5
        TranslateAnimation translateAnimation = new
                TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f,
                Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
        //設定動畫的時間長度
        translateAnimation.setDuration(2000);
        //設定重複的型別
        translateAnimation.setRepeatMode(Animation.REVERSE);
        //設定重複的次數
        translateAnimation.setRepeatCount(2);
        //設定是否停留在最終狀態
        translateAnimation.setFillAfter(true);
        //可以設定一個動畫插入器,可以新增一些效果,以下是一個跳動的效果
        translateAnimation.setInterpolator(new BounceInterpolator());
        //讓動畫執行起來
        imageView.startAnimation(translateAnimation);
    }

    public void set(View view) {
        //AnimationSet 組合動畫
        AnimationSet animationSet = new AnimationSet(false);

        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
        alphaAnimation.setDuration(2000);
        alphaAnimation.setRepeatMode(Animation.REVERSE);
        alphaAnimation.setRepeatCount(2);
        alphaAnimation.setFillAfter(false);
        //新增透明動畫
        animationSet.addAnimation(alphaAnimation);

        RotateAnimation rotateAnimation = new
                RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
        rotateAnimation.setDuration(2000);
        rotateAnimation.setRepeatMode(Animation.REVERSE);
        rotateAnimation.setRepeatCount(2);
        rotateAnimation.setFillAfter(false);
        //新增旋轉動畫
        animationSet.addAnimation(rotateAnimation);

        ScaleAnimation scaleAnimation = new
                ScaleAnimation(1, 2, 1, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
        scaleAnimation.setDuration(2000);
        scaleAnimation.setRepeatMode(Animation.REVERSE);
        scaleAnimation.setRepeatCount(2);
        scaleAnimation.setFillAfter(false);
        //新增縮放動畫
        animationSet.addAnimation(scaleAnimation);

        TranslateAnimation translateAnimation = new
                TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f,
                Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
        translateAnimation.setDuration(2000);
        translateAnimation.setRepeatMode(Animation.REVERSE);
        translateAnimation.setRepeatCount(2);
        translateAnimation.setFillAfter(true);
        translateAnimation.setInterpolator(new BounceInterpolator());
        //新增平移動畫
        animationSet.addAnimation(translateAnimation);

        //把整個動畫組執行起來
        imageView.startAnimation(animationSet);
    }
}