《Android那些事》——清晰理解各個Animation
阿新 • • 發佈:2019-01-13
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; } }