Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画
原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html
自定義轉場可以創建自定義動畫。比如,可以定義一種動畫來更改文本的顏色或者將輸入框的顏色置灰以表示不可用。
自定義轉場與內置轉場相同,都作用在View之上。不過與內置轉場不同的是,還需要另外寫一些代碼來捕獲轉場過程的屬性值,并生成相關動畫。
這節課將會學習如何獲取屬性值,并生成相關動畫。
繼承Transition類
為了創建自定義轉場,需要繼承Transition,并重寫以下方法:
public class CustomTransition extends Transition {@Overridepublic void captureStartValues(TransitionValues values) {}@Overridepublic void captureEndValues(TransitionValues values) {}@Overridepublic Animator createAnimator(ViewGroup sceneRoot,TransitionValues startValues,TransitionValues endValues) {} }下面的部分會學習如何重寫這些方法。
獲取View的屬性值
轉場動畫使用了屬性動畫系統。屬性動畫通過更改View的屬性實現了屬性動畫,所以轉場框架需要使用屬性的啟動值與結束值來構造動畫。
屬性動畫通常只會用到View的極少屬性。比如,顏色動畫需要顏色屬性值,平移動畫需要位置屬性值。因為轉場動畫只需要某些特定的屬性值,所以轉場框架并沒有將所有的屬性值提供給轉場動畫。相反的,轉場框架會調用回調方法以便允許轉場動畫獲得需要的屬性值,并將其存入框架中。
獲得起始值
為了可以將起始的View值傳給轉場框架,需要實現captureStartValues(transitionValues)方法。轉場框架會在每個View處于啟動場景時調用該方法。這個方法的參數是一個TransitionValues對象,這個對象包含了View的引用及一個Map對象,你可以將View的屬性值存放在這個Map對象中,然后這些值就會被傳給轉場框架。
為了確保所存儲的屬性值的鍵不會與其它TransitionValues的鍵相沖突,可以使用以下命名規則:
package_name:transition_name:property_name
下面的代碼展示了captureStartValues()方法的實現:
public class CustomTransition extends Transition {// Define a key for storing a property value in// TransitionValues.values with the syntax// package_name:transition_class:property_name to avoid collisionsprivate static final String PROPNAME_BACKGROUND ="com.example.android.customtransition:CustomTransition:background";@Overridepublic void captureStartValues(TransitionValues transitionValues) {// Call the convenience method captureValuescaptureValues(transitionValues);}// For the view in transitionValues.view, get the values you// want and put them in transitionValues.valuesprivate void captureValues(TransitionValues transitionValues) {// Get a reference to the viewView view = transitionValues.view;// Store its background property in the values maptransitionValues.values.put(PROPNAME_BACKGROUND, view.getBackground());}... }獲得結束值
轉場框架會在每次場景結束時調用captureEndValues(TransitionValues)方法。至于其它方面,該方法內部的實現邏輯與獲取開始值的邏輯一致。
下面的代碼段展示了captureEndValues方法的實現:
@Override public void captureEndValues(TransitionValues transitionValues) {captureValues(transitionValues); }在這個示例中,captureStartValues()方法與captureEndValues()方法都會調用captureValues()方法來獲取值然后存儲這些值。在captureValues()方法中獲取View屬性都相同,只是啟動場景與結束場景獲得的屬性值不同。轉場框架對起始場景與結束場景分別維護了各自的Map實例。
創建自定義Animator
為了使View在轉場的時候可以以動畫的方式變動,需要重寫createAnimator()方法,并返回一個Animator對象。在轉場框架調用這個方法時,會將變幻場景的根View與TransitionValues對象傳回。啟動TransitionValues對象包含了轉場過程中所捕獲的屬性值。
createAnimator()方法的調用取決于啟動場景與結束場景變換的過程。試著將淡入淡出動畫想象為自定義轉場動畫。如果啟動場景有5個target,而到了結束場景時被移除了兩個,并且還添加了一個新的target,那么轉場框架會調用createAnimator()方法6次:其中三個在啟動場景與結束場景中都在出現,其中兩個在轉變到結束場景的過程中被移除了,最后一個在轉換到結束場景時被添了進去。
對于在開始場景與結束場景中都存在的target View,轉場框架會在調用createAnimator()方法時將TransitionValues對象通過startValues參數與endValues參數回傳。對于只存在于單個場景的target View,轉場框架會通過對應的參數將TransitionValues對象回傳,而另一個參數則為空。
在實現createAnimator(ViewGroup, TransitionValues, TransitionValues)方法時,使用所捕獲的屬性值來創建一個Animator對象,并將其返回給轉場框架。對于實現的示例,請參見CustomTransition示例中的ChangeColor類。有關更多屬性動畫的相關信息,請參見Property Animation。
使用自定義轉場動畫
自定義轉場動畫與內置轉場動畫的使用方式相同。同樣可以通過轉場管理者使用自定義轉場動畫,具體使用描述請參見Applying a Transition。
總結
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: anaconda配置虚拟环境
- 下一篇: Python多进程中多参数问题