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屬性動畫之ValueAnimator和Android屬性動畫之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();