1. 程式人生 > >【Android開發小記--3】按鈕檢視動畫幾種效果

【Android開發小記--3】按鈕檢視動畫幾種效果

下面是幾種按鈕動畫的效果實現,分別有程式碼實現和XML中編輯。


首先是效果圖:


              



一、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);
    }
}