Android中的常用的動畫類型及其本質的區別

Android 中的動畫 Animation

一, 概要
android3.0之前 執行兩種動畫, 幀動畫 和 補間動畫

android3.0之後 引入了一個新的動畫: 屬性動畫

二,分類

幀動畫 Frame

補間動畫 Tween

    透明度補間動畫  

    縮放補間動畫

    旋轉補間動畫

    移動補間動畫

屬性動畫 Property

三, 幀動畫 Frame Drawable Animation <一組圖片> GIF文件

每一張靜止的圖片顯示出來, 利用人眼睛的錯覺, 得出的動畫


創建方式

    1, 資源文件創建方式

        1.1 在res中創建drawable文件夾

        1.2 創建動畫的文件 ***.xml 標籤:  <animation-list/>

        1.3 在代碼中或者在佈局頁面中, 設置ImageView的背景動畫資源  android:background=""

        1.4 獲得AnimationDrawable動畫管理器, 調用start() 開始播放動畫, 調用stop()停止播放



    2, java代碼創建方式

        2.1 在代碼中獲得AnimationDrawable動畫管理器

        2.2 向動畫管理器中添加動畫

        2.3 爲圖片設置動畫

        2.4 調用AnimationDrawable中start() 開始播放動畫, 調用stop() 停止播放



    3, 設置動畫播放的次數
        //if true: 執行一次  , if false: 重複執行
       drawable.setOneShot(false);

四, 補間動畫

 補充中間的動畫

 開發者只需要設置開始和結束的動畫, 中間的動畫是由系統計算補齊

 主要分爲:  透明度/ 縮放/ 旋轉/ 平移 / set(集合)

 創建方式:  

1, 資源文件中

    存放的目錄:  res/anim/

    <alpha />   透明度

    <scale />   縮放

    <Rotate />  旋轉

    <Translate />   平移

    <set />     組合動畫

       步驟:
         在res/anim/ 創建xml的資源文件

         在java代碼中 startAnimation(AnimationUtils.londAnimation(上下文對象,anim的資源文件id));


2, java代碼中


       2.1  得到Animation對象

       2.2  爲控件啓動動畫

五, 爲Activity的切換添加動畫

//爲Activity添加動畫
/**
 * enterAnim    進入的動畫
 * exitAnim 出去的動畫
 */
overridePendingTransition(R.anim.anim01, R.anim.anim02);

六, 屬性動畫 Property 3.0後出現 增強版補間動畫

存放的文件夾:  res/animator/***.xml

屬性動畫和補間動畫區別

    1, 補間動畫可以設置4個方向的動畫,  屬性動畫指定任意動畫

    2, 補間動畫是針對UI控件執行的動畫, 屬性動畫是針對對象進行的動畫

    3, 補間動畫移動後, 控件的實際位置沒有變化 ;  屬性動畫會隨着位置的變化而變化


屬性名稱:

    位移:  translationX  translationY

    旋轉:  rotation  rotationX  ratationY

    縮放:  scaleX   scaleY

    透明度: alpha

創建方式

    1, xml的方式

        1.1 res中創建文件夾 animator, 並且在文件夾中創建.xml的文件  <objectAnimator/>

        1.2 在代碼中加載資源文件中的動畫

        ObjectAnimator animator = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.anim_scalex);


        1.3 設置要執行該動畫的對象

        animator.setTarget(iv);


        1.4 啓動動畫

        animator.start();

    2, 代碼的方式

        單個動畫:

        ObjectAnimator animator = ObjectAnoimator.ofFloat(目標對象,屬性名稱,可變參數的值);

        animator.start();


         集合:

        AnimatorSet set = new AnimatorSet();

        //定義每個動畫
        ObjectAnimator animator1 = ObjectAnoimator.ofFloat(目標對象,屬性名稱,可變參數的值);

        ObjectAnimator animator2 = ObjectAnoimator.ofFloat(目標對象,屬性名稱,可變參數的值);


        List<Animator> list = new ArrayList<Animator>();
        list.add(animator1);
        list.add(animator2);

        //把動畫添加到集合中
        set.playSequentially(list);//依次執行
        //set.playTogether(list);//一起執行

        //第二種方式
        //set.play(animator1).with(animator2);  一起執行
        //play()   with()  after()  before() 

        set.start();


        監聽器:

    alphaAnimator.addListener(new AnimatorListener() {

            @Override
            public void onAnimationStart(Animator animation) {
                // TODO 動畫開始時, 執行

            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                // TODO 動畫重複的時候, 執行

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                // TODO 動畫結束時,執行

            }

            @Override
            public void onAnimationCancel(Animator animation) {
                // TODO 動畫取消時執行

            }
        });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章