【Android開發小記--3】按鈕檢視動畫幾種效果
阿新 • • 發佈:2019-02-06
下面是幾種按鈕動畫的效果實現,分別有程式碼實現和XML中編輯。
對動畫進行監聽,在動畫結束時,出現一個Toast。
對動畫的效果實現自定義,實現一個button左右搖擺的效果。
首先是效果圖:
一、Button透明度變化
//============================================================= // 1------透明動畫效果 //============================================================= findViewById(R.id.btnAlphaMe).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //----1---程式碼編輯------------------------ // AlphaAnimation anim_alpha = new AlphaAnimation(0,1); // anim_alpha.setDuration(1000);//動畫時間 // v.startAnimation(anim_alpha);//啟動動畫 //----1----XML編輯--------------------------- v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_alpha)); } });
二、Button旋轉效果
//========================================================== // 2------旋轉動畫效果 //=========================================================== findViewById(R.id.btnRotateMe).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //----2---程式碼編輯------------------------ //繞預設座標旋轉(控制元件的左上角) RotateAnimation ra = new RotateAnimation(0,360); //還可指明繞著某一點旋轉,RotateAnimation(0,360,x座標,y座標) // RotateAnimation ra = new RotateAnimation(0,360,200,500); //使用相對座標 // RotateAnimation ra = new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); ra.setDuration(1000); v.startAnimation(ra); //----2----XML編輯--------------------------- // v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_rotate)); } });
三、Button移動效果
//========================================================== // 3------移動動畫效果 //=========================================================== findViewById(R.id.btnTranslateMe).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //----3---程式碼編輯------------------------ // TranslateAnimation ta = new TranslateAnimation(0,200,0,200);//這裡的200是相對位置 // ta.setDuration(1000); // v.startAnimation(ta); //----3----XML編輯--------------------------- v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_translate)); } });
四、Button縮放效果
//==========================================================
// 4------縮放動畫效果
//===========================================================
findViewById(R.id.btnScaleMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//----4---程式碼編輯------------------------
//縮放中心為控制元件左上角
// ScaleAnimation sa = new ScaleAnimation(0,1,0,1);
//從某一點開始縮放
// ScaleAnimation sa = new ScaleAnimation(0,1,0,1,200,500);
//相對於自身的百分比
ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
sa.setDuration(1000);
v.startAnimation(sa);
//----4----XML編輯---------------------------
// v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_scale));
}
});
五、Button混合動畫效果
//==========================================================
// 5------動畫效果混合
//===========================================================
findViewById(R.id.btnAnimateMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//----5---程式碼編輯------------------------
AnimationSet as = new AnimationSet(true);//是否共用動畫補間(勻速、加速、減速)
as.setDuration(1000);
AlphaAnimation aa = new AlphaAnimation(0,1);
aa.setDuration(1000);
as.addAnimation(aa);
TranslateAnimation ta = new TranslateAnimation(200,0,200,0);
ta.setDuration(1000);
as.addAnimation(ta);
v.startAnimation(as);
//----5----XML編輯---------------------------
// v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim));
}
});
六、Button動畫監聽
對動畫進行監聽,在動畫結束時,出現一個Toast。
findViewById(R.id.btnAnimateMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//==========================================================
// 6------動畫效果監聽
//===========================================================
Animation a = AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim);
a.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
Toast.makeText(MainActivity.this, "Animation end", Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
v.startAnimation(a);
}
});
七、自定義Button動畫
對動畫的效果實現自定義,實現一個button左右搖擺的效果。
//==========================================================
// 7------自定義動畫效果
//===========================================================
findViewById(R.id.btnCustomAnim).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CustomAnim ca = new CustomAnim();
ca.setDuration(1000);
v.startAnimation(ca);
}
});
自定義的動畫 CustomAnim.java
public class CustomAnim extends Animation {
/*獲取目標物件寬高*/
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) { //(補間時間,變化物件)
//-----1------透明度變化效果
// t.setAlpha(interpolatedTime);
//----2-------這裡是沒有動畫過渡的,是瞬間移動
// t.getMatrix().setTranslate(200,200);
//-----3------這裡是一個過程
// t.getMatrix().setTranslate(200*interpolatedTime,200*interpolatedTime);
//------4-----左右搖擺效果
t.getMatrix().setTranslate((float)(Math.sin(interpolatedTime*20)*50),0);
super.applyTransformation(interpolatedTime, t);
}
}