Android應用資源—動畫資源(Animation Resources)(一)

 有兩種類型的動畫資源:

屬性動畫

在設定的時間內,通過修改與Animator類相關的對象的屬性值來創建一個動畫。

視圖動畫

有兩種類型的視圖動畫框架

補間動畫(Tween animation):通過執行通過執行一系列的與Animation類相關的單一圖片的轉換來創建動畫。

幀動畫(Frame animation):通過顯示與AnimationDrawable類的順序相關的圖片序列來創建動畫。

屬性動畫

動畫被定義在要修改的目標對象屬性的XML中,如設定時間內的背景色或alpha值。

文件位置(FILE LOCATION):

res/animator/filename.xml,文件名被用作資源ID。

被編譯的資源類型(COMPILED RSOURCE DATATYPE):

資源要指向ValueAnimator、ObjectAnimator或AnimatorSet類型

資源引用(RESOURCE REFERENCE):

在Java代碼中:R.animation.filename

在XML文件中:@[package:]animator/filename

語法(SYNTAX):

<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        …
    </set>
</set>

這個文件必須有一個單一的跟元素:既可以是<set>、<objectAnimator>也可以是<valueAnimator>。可以把動畫元素一起組織到<set>元素中,包括其他的<set>元素。

元素(ELEMENTS):

<set>

   能夠包含其他動畫元素的一個容器(<objectAnimator>、<valueAnimator>、或其他的<set>元素)。代表一個AnimatorSet對象。

   可以指定<set>嵌套標簽,把更多的動畫組織到一起。每個<set>能夠定義它自己的順序屬性。

屬性(ATTRIBUTES):

    android:ordering

關鍵屬性,它指定該集合中動畫的播放順序。

  

說明
sequentially 在本組集合中按順序播放動畫。
together(默認) 同一時間播放本組集合中的動畫

 

<objectAnimator>

    在特定的設定時間內一個對象的具體動畫屬性,代表瞭一個ObjectAnimator對象。

屬性(ATTRIBUTES):

    android:propertyName

       字符串類型,必須的。通過這個名字來引用動畫的對象屬性。例如,可以給View對象指定“alpha”或“backgroundColor”屬性。ObjectAnimator元素沒有暴露target屬性,因此不能在XML聲明中把對象設置給動畫。必須通過調用loadAnimator()方法和setTarget()方法把動畫XML資源填充到包含這個屬性的目標對象中。

    android:valueTo

       浮點類型、整型、或顏色值,必須的。它是動畫屬性的結束值。顏色是用六個十六進制數表示(如#333333)。

    android:valueFrom

       浮點類型、整型、或顏色值,它是動畫屬性的開始值,如果沒有指定,那麼動畫會在用屬性的get方法獲取值的時刻開始。顏色是六位十六進制數表示(如#333333)。

    android:duration

       整數類型。以毫秒為單位,指定動畫時間,默認是300毫秒。

    android:startOffset

       整數類型。在start()方法被調用之後,動畫延遲的毫秒數。

    android:repeatCount

       整數類型。指定動畫的重復次數。設置為“-1”,說明要無限次重復,或指定一個正整數。如,設定為1,說明動畫第一次運行之後,還要重復一次,因此動畫要播放兩次。默認值是0,意味著不重復。

    android:repeatMode

       正整數。指定在動畫到達結尾時的行為方式。隻有android:repeatCount被設置為正整數或“-1”時,這個屬性才有效果。如果設置為“reverse”,那麼每次重復時會逆向播放動畫,如果設置為“repeat”,那麼每次重復時,會從動畫的開頭來播放動畫。

    android:valueType

       關鍵屬性。如果值是顏色值,那麼不用指定這個屬性。動畫框架會自動處理顏色值。

  

說明
intType 指定動畫的值是整數
floatType(默認) 指定動畫的值是浮點數

 

<animator>

在設定時間內的動畫。代表瞭一個ValueAnimator對象。

屬性(ATTRIBUTES):

    android:valueTo

        浮點型、整型或顏色值,必須的。它是動畫結束的的值。顏色值用六位十六進制數來代表(如,#333333)

    android:valueFrom

        浮點型、整型或顏色值,必須的。它是動畫開始的值。顏色值用六位十六進制數來代表(如,#333333)

    android:duration

        整數。以毫秒為單位,指定動畫的播放時間。默認是300毫秒。

    android:startOffset

        整數。指定start()方法被調用後,動畫延遲的毫秒數。

    android:repeatCount

        整數。指定動畫的重復次數。如果設置為“-1”,則動畫會無限次重復,或者指定一個正整數。例如,設定為“1”,那麼動畫在初始運行一次之後,會再重復播放一次,因此動畫總共播放瞭兩次。它的默認值是0,這意味著動畫重復。

     android:repeatMode

        整數。它指定動畫到達結尾時重復的行為方式。android:repeatCount必須被設置為正整數或“-1”時,這個屬性才會有效果。如果設置為“reverse”,動畫在每次重播時,會逆向播放;如果設置為“repeat”,那麼動畫每次重播時,會重開始的位置播放。

     android:valueType

        關鍵屬性,如果值是顏色,則不用指定這個屬性。因為動畫框架會自動的處理顏色值

  

說明
intType 指定動畫的值是整數
floatType(默認) 指定動畫的值是浮點數

 

例子(EXAMPLE):

這個XML文件被保存在res/animator/property_animator.xml:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

要運行這個動畫,就必須在代碼中把這個XML資源填充給一個AnimatorSet對象,然後在啟動這個動畫集之前,把目標對象設置個所有的動畫。調用setTarget方法可以方便的把一個單一對象設置給AnimatorSet對象的所有子對象。代碼如下:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,    R.anim.property_animator);

set.setTarget(myObject);set.start();

 
摘自 FireOfStar的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *