Android動畫——View動畫

來源:互聯網
上載者:User

標籤:form   運行時   cal   集合   group   als   XML   ons   動畫   

一、概述

  View動畫共有四種效果分別是平移動畫、旋轉動畫、縮放動畫以及透明度變化,此外幀動畫也屬於View動畫,但實現效果與前面幾種有所區別。

二、View動畫的種類

  四種動畫分別對應四個Animation的子類TranslateAnimation、RotateAnimation、ScaleAnimation、AlphaAnimation,同時也可用XML來定義動畫,分別對應標籤<translate> <rotate> <scale> <alpha>,在實際應用中以XML方式為主,因為這種方式結構更為清晰。

  下面簡單介紹XML定義動畫。在res下的anim檔案夾添加動畫源檔案,其中最外層為set表示是一個動畫集合,可以在其內部定義多種動畫效果。set的常用屬性有:

      1、interpolator 插值器,影響動畫的速度,即在播放動畫時速度的變化,如最初慢逐漸加速或最初快逐漸減速等效果。

        在Animations架構當中定義了一下幾種Interpolator

        1.AccelerateDecelerateInterpolator:在動畫開始與結束的地方速率改變比較慢,在中間的時候速率快。

        2.AccelerateInterpolator:在動畫開始的地方速率改變比較慢,然後開始加速
        3.CycleInterpolator:動畫迴圈播放特定的次數,速率改變沿著正弦曲線

        4.DecelerateInterpolator:在動畫開始的地方速率改變比較慢,然後開始減速
        5.LinearInterpolator:動畫以均勻的速率改變

      2、shareInterpolator 是否共用插值器,即動畫集合內的動畫是否共用set定義的插值器。

      3、zAdjustment 設定的動畫運行時在Z軸的位置(top/bottom/normal)

      4、fillAfter 動畫結束後是否保留動畫效果 

      5、fillBefore 動畫結束後是否還原初始狀態

  四種動畫的常用屬性則有

      1、translate   平移動畫

        1、fromXDelta、toXDelta 設定X座標的初始值以及結束值

        2、fromYDelta、toYDelta 同理

      2、scale 縮放動畫

        1、fromXScale toXScale 水平方向縮放始末值

        2、fromYScale toYScale 同理

        3、pivotX pivotY 縮放軸點座標

      3、rotate 旋轉動畫

        1、fromDegrees toDegrees 旋轉角度始末值

        2、pivotX、pivotY 旋轉的軸點座標

        軸點預設值為左上方。

      4、alpha 透明度動畫

        1、fromAlpha toAlpha 透明度始末值

  上述四種動畫及set共同的常用屬性還有:duration 動畫期間 以及fillAfter和fillBefore。動畫本身也可以指定自己的插值器。

  

  使用動畫非常簡單,在定義XML檔案後,用以下代碼即可為View載入動畫

 Animation animation = AnimationUtils.loadAnimation(this,R.anim.animation_test);        testImage.startAnimation(animation);

  其中startAnimation表示立即執行動畫,相對應的還有setAnimation,它表示告知View將要執行的動畫,可以設定什麼時候執行。

  除了XML的方式外,還可以通過代碼實現動畫,同樣很簡單。

 AlphaAnimation alphaAnimation = new AlphaAnimation(0,1);          alphaAnimation.setDuration(3000);          testImage.startAnimation(alphaAnimation);

    以上為透明度動畫,其他動畫效果方法類似。

 

 除了上述的使用之外還可為動畫設定監聽,代碼如下

        animation.setAnimationListener(new Animation.AnimationListener() {            @Override            public void onAnimationStart(Animation animation) {            }            @Override            public void onAnimationEnd(Animation animation) {                }            @Override            public void onAnimationRepeat(Animation animation) {            }        });

               三個監聽方法分別對應三種狀態。

三、自訂View動畫

   自訂View動畫主要通過繼承Animation抽象類別,複寫initialize和applyTransformation方法,其中initialize方法執行初始化工作,applyTransformation方法則進行相應的矩陣變化。在實際開發中很少用到自訂View動畫。

四、幀動畫

   幀動畫實作類別似投影片播放的效果,播放預設的一組圖片。使用的類為AnimationDrawable,對應的標籤為animation-list,子標籤item通過drawable指定播放的圖片,duration指定圖片顯示時間。

    

<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot="false">    <item android:drawable="@drawable/ic_add" android:duration="1000" />    <item android:drawable="@drawable/ic_manage" android:duration="1000" />    <item android:drawable="@drawable/ic_setting" android:duration="1000" />    <item android:drawable="@drawable/ic_switch" android:duration="1000" /></animation-list>

   將上述的Drawable作為View的背景並通過Drawable的start方法播放,預設為迴圈播放。幀動畫已造成OOM(記憶體溢出),應避免使用過多大尺寸圖片。

      TextView textView = (TextView) findViewById(R.id.frame_animation);                AnimationDrawable drawable = (AnimationDrawable) textView.getBackground();                drawable.start();

五、View動畫的特殊使用情境

  1、LayoutAnimation

    作用於ViewGroup,為ViewGroup中每個子項目的出場添加動畫效果。

    使用步驟主要有:

      1、定義對應的XML檔案,如下

<?xml version="1.0" encoding="utf-8"?><layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"    android:delay="0.5"    android:animationOrder="normal"    android:animation="@anim/animation_item" />

       delay為動畫延遲時間,animationOrder指定動畫播放順序(normal/random/reverse),animation指定具體的動畫。

      2、定義具體的動畫效果

      3、為ViewGroup指定LayoutAnimation,通過layoutAnimation屬性。

    除了上述方法還可以通過代碼來實現,主要通過LayoutAnimationController。

   LayoutAnimationController controller = new LayoutAnimationController(animation);        controller.setOrder(LayoutAnimationController.ORDER_NORMAL);        listview.setLayoutAnimation(controller);

  2、Activity的轉場效果

    主要通過overridePendingTransition(int enterAnim,int exitAnim)方法實現。

    其中,enterAnim指Activity被開啟時的動畫資源id,exitAnim指Activity被暫停時的動畫資源id。

    只要在startActivity或者複寫finish方法時調用該方法即可實現自訂的轉場效果,注意該方法必須放在前述方法的後面。

    類似的,對於片段(Fragment)也可添加切換動畫,為了相容性,使用support-v4相容包,通過FragmentTransaction的setCustomAnimations()來添加切換動畫。

      

Android動畫——View動畫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.