Android的View動畫
阿新 • • 發佈:2019-02-11
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); } }