1. 程式人生 > >Android屬性動畫之XML定義方式

Android屬性動畫之XML定義方式

(1) XML檔案位置:res/animator/filename.xml
(2) 檔案編譯後的型別:ValueAnimator, ObjectAnimator, AnimatorSet。這三種類型前面已經介紹過。
(3) 引用資源的方式:

  • In Java: R.animator.filename
  • In XML: @[package:]animator/filename

下面來看看它的語法:

<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、animator分別對應AnimatorSet、ObjectAnimator、ValueAnimator三個物件,這三個物件前面已經介紹過了:Android屬性動畫之ValueAnimatorAndroid屬性動畫之ObjectAnimator和AnimatorSet

下面來分別介紹一下這幾個元素。

1、<set>

它是一個集合,包含了其他的元素,包括, 和其他的元素,它代表的就是一個AnimatorSet物件。

它具有如下屬性:

android:ordering
指定集合中動畫播放的順序。

它具有兩種型別的值:sequentially和together。第一個表示順序執行,第二個表示同時執行。預設是together。

2、<objectAnimator>
它指定一個物件的屬性動畫,表示一個ObjectAnimator物件。

它具有如下屬性:
android:propertyName
屬性名稱,例如一個view物件的”alpha”和”backgroundColor”。

android:valueFrom
變化開始值

android:valueTo
變化結束值

android:valueType
變化值型別
它有兩種值:intType和floatType,第二種為預設值

android:duration
持續時間

android:startOffset
動畫開始延遲時間

android:repeatCount
重複次數,-1表示無限重複

android:repeatMode
重複模式,前提是android:repeatCount為-1
它有兩種值:”reverse”和”repeat”,第一個表示反向重複,第二個為順序重複。

3、<animator>

它對應的就是ValueAnimator物件。

它具有如下屬性:

android:valueFrom

android:valueTo

android:duration

android:startOffset

android:repeatCount

android:repeatMode

android:valueType

這個跟上面一樣,就不解釋了,需要注意的是,在前面 Android屬性動畫之ValueAnimator中,我們就知道,使用這樣方式需要自己去進行屬性值的修改,它裡面沒有指定屬性,我們使用animator.addUpdateListener去獲取變化值,然後自己修改對應屬性的值。

下面我們來看看一個例子:
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來定義,那麼如果希望讓這個動畫執行起來,首先肯定是需要解析這個XML檔案,要把這個XML檔案解析為一個AnimatorSet物件,然後為這個動畫設定目標物件,最終啟動動畫。

下面是程式碼:

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