1. 程式人生 > >Tween Animation程式碼實現效果

Tween Animation程式碼實現效果

 

1,補間動畫(Tween Animation)

  • a. 補間動畫(支援四種類型:平移(Translate)、旋轉(Rotate)、縮放(Scale)、不透明度(Alpha)。

  • b. 只是顯示的位置變動,View的實際位置未改變,表現為View移動到其他地方,點選事件仍在原處才能響應。(這個是重點,比如你設了控制元件點選事件,動畫結束後,你點你看到的控制元件位置,是不會響應的,點原來的位置可以響應,這就是補間動畫只是顯示位置變動,實際位置沒有改變)

  • c. 組合使用步驟較複雜。

  • d. View Animation 也是指此補間動畫。

2,程式碼實現補間動畫:

【1】透明動畫(AlphaAnimation

    //[1]建立一個透明動畫  1.0代表完全不透明  0.0完全透明

        AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);

        //[2]設定動畫執行的時長

        aa.setDuration(2000);

        //[3]設定動畫執行重複次數

        aa.setRepeatCount(1);

        //[4]設定重複的模式

        aa.setRepeatMode(Animation.REVERSE);

        //[3]iv執行動畫

        iv.startAnimation(aa);

 

【2】旋轉動畫(RotateAnimation)    

    // 建立旋轉動畫

        // RotateAnimation ra = new RotateAnimation(0, 360);

        // 0.5f代表當前控制元件寬*0.5

        // Animation.RELATIVE_TO_SELF 相對於自身

        RotateAnimation ra = new RotateAnimation(0, 360,

                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,

                0.5f);

        // [2]設定動畫執行的時長

        ra.setDuration(2000);

        // [3]設定動畫執行重複次數

        ra.setRepeatCount(1);

        // [4]設定重複的模式

        ra.setRepeatMode(Animation.REVERSE);

        // [3]iv執行動畫

        iv.startAnimation(ra);

 

【3】縮放動畫(ScaleAnimation)    

    // 縮放(放大 縮小)1.0預設   3.0f是大三倍。

        ScaleAnimation sa = new ScaleAnimation(1.0f, 3.0f, 1.0f, 3.0f,

                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,

                0.5f);

        // [2]設定動畫執行的時長

        sa.setDuration(2000);

        // [3]設定動畫執行重複次數

        sa.setRepeatCount(1);

        // [4]設定重複的模式

        sa.setRepeatMode(Animation.REVERSE);

        // [3]iv執行動畫

        iv.startAnimation(sa);

 

【4】位移動畫(TranslateAnimation)  

  // 建立一個位移動畫 最後一個引數 慎用整數

        //RELATIVE_TO_PARENT 相對於父佈局

        TranslateAnimation ta = new TranslateAnimation(

                Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,

                0, Animation.RELATIVE_TO_PARENT, 0,

                Animation.RELATIVE_TO_PARENT, 0.2f);

        // [2]設定動畫執行的時長

        ta.setDuration(2000);



        // 當動畫執行完畢後 停留在結束位置

        ta.setFillAfter(true);

        // [3]iv執行動畫

        iv.startAnimation(ta);

【5】動畫集合(AnimationSet) --- 使用    set.addAnimation(aa)新增開啟動畫


 

// [1]建立動畫的合集

        AnimationSet set = new AnimationSet(true);

        // [1]建立一個透明動畫 1.0代表完全不透明 0.0完全透明

        AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);

        // [2]設定動畫執行的時長

        aa.setDuration(2000);

        // [3]設定動畫執行重複次數

        aa.setRepeatCount(1);

        // [4]設定重複的模式

        aa.setRepeatMode(Animation.REVERSE);

      

        RotateAnimation ra = new RotateAnimation(0, 360,

                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,

                0.5f);

        // [2]設定動畫執行的時長

        ra.setDuration(2000);

        // [3]設定動畫執行重複次數

        ra.setRepeatCount(1);

        // [4]設定重複的模式

        ra.setRepeatMode(Animation.REVERSE);



        ScaleAnimation sa = new ScaleAnimation(1.0f, 3.0f, 1.0f, 3.0f,

                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,

                0.5f);

        // [2]設定動畫執行的時長

        sa.setDuration(2000);

        // [3]設定動畫執行重複次數

        sa.setRepeatCount(1);

        // [4]設定重複的模式

        sa.setRepeatMode(Animation.REVERSE);



        TranslateAnimation ta = new TranslateAnimation(

                Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,

                0, Animation.RELATIVE_TO_PARENT, 0,

                Animation.RELATIVE_TO_PARENT, 0.2f);

        // [2]設定動畫執行的時長

        ta.setDuration(2000);



        // 當動畫執行完畢後 停留在結束位置

        ta.setFillAfter(true);

        // 往動畫合集裡面新增動畫

        set.addAnimation(aa);

        set.addAnimation(ra);

        set.addAnimation(sa);

        set.addAnimation(ta);

        

        //執行動畫

        iv.startAnimation(set);