自訂轉場效果可讓您建立無法透過任何來源使用的動畫 內建的轉換類別舉例來說,您可以定義自訂轉場效果 將文字和輸入欄位的前景顏色設為灰色,表示這些欄位已停用 在新畫面上。這類變更可協助使用者看到您停用的欄位。
自訂轉場效果 (例如其中一種內建轉場效果類型) 會套用到動畫 每個開始和結束場景的子項檢視畫面。不過,與內建轉換類型不同 您必須提供用來擷取屬性值並產生動畫的程式碼。 此外,您可能也想為動畫定義目標檢視畫面的子集。
本頁說明如何擷取屬性值,並產生以建立動畫的方式 自訂轉場效果
擴充 Transition 類別
如要建立自訂轉換,請在專案中新增可擴充 Transition
類別的類別,並覆寫以下程式碼片段中顯示的函式:
Kotlin
class CustomTransition : Transition() { override fun captureStartValues(transitionValues: TransitionValues) {} override fun captureEndValues(transitionValues: TransitionValues) {} override fun createAnimator( sceneRoot: ViewGroup, startValues: TransitionValues?, endValues: TransitionValues? ): Animator? {} }
Java
public class CustomTransition extends Transition { @Override public void captureStartValues(TransitionValues values) {} @Override public void captureEndValues(TransitionValues values) {} @Override public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues) {} }
以下各節說明如何覆寫這些函式。
擷取檢視畫面屬性值
轉場動畫會使用 屬性動畫總覽。屬性 動畫會將檢視畫面屬性從起始值變更為結束指定值的結束值 因此架構需要同時包含開頭和結尾值 屬性以建構動畫。
不過,屬性動畫通常只需要所有檢視區塊屬性的一小部分 輕鬆分配獎金例如,顏色動畫需要色彩屬性值,而動作 動畫需要位置屬性值因為動畫所需的屬性值 轉換作業專屬,但轉換架構不會提供所有屬性值 轉換至轉場效果相反地,該架構會叫用能讓轉換 僅擷取需要的屬性值並儲存在架構中。
擷取起始值
如要將起始檢視值傳遞至架構,請導入
captureStartValues(transitionValues)
函式。該架構會為起始場景中的每個檢視畫面呼叫這個函式。函式
引數是包含參照的 TransitionValues
物件
另一個則是 Map
例項,您可以在此儲存自身的檢視值
在實作中,擷取這些屬性值,然後傳回至
並儲存在地圖中
為了確保屬性值的鍵不會與其他值衝突
TransitionValues
金鑰,請使用以下命名配置:
package_name:transition_name:property_name
以下程式碼片段顯示 captureStartValues()
函式的實作方式:
Kotlin
class CustomTransition : Transition() { // Define a key for storing a property value in // TransitionValues.values with the syntax // package_name:transition_class:property_name to avoid collisions private val PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background" override fun captureStartValues(transitionValues: TransitionValues) { // Call the convenience method captureValues captureValues(transitionValues) } // For the view in transitionValues.view, get the values you // want and put them in transitionValues.values private fun captureValues(transitionValues: TransitionValues) { // Get a reference to the view val view = transitionValues.view // Store its background property in the values map transitionValues.values[PROPNAME_BACKGROUND] = view.background } ... }
Java
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 collisions private static final String PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background"; @Override public void captureStartValues(TransitionValues transitionValues) { // Call the convenience method captureValues captureValues(transitionValues); } // For the view in transitionValues.view, get the values you // want and put them in transitionValues.values private void captureValues(TransitionValues transitionValues) { // Get a reference to the view View view = transitionValues.view; // Store its background property in the values map transitionValues.values.put(PROPNAME_BACKGROUND, view.getBackground()); } ... }
擷取結束值
架構會呼叫 captureEndValues(TransitionValues)
函式
針對結尾場景中的每個目標檢視畫面執行一次動作在所有其他方面,captureEndValues()
的運作方式與 captureStartValues()
相同。
下列程式碼片段顯示 captureEndValues()
函式的實作方式:
Kotlin
override fun captureEndValues(transitionValues: TransitionValues) { captureValues(transitionValues) }
Java
@Override public void captureEndValues(TransitionValues transitionValues) { captureValues(transitionValues); }
在此範例中,captureStartValues()
和 captureEndValues()
函式會叫用 captureValues()
來擷取及儲存值。資料檢視屬性
captureValues()
擷取的值相同,但
開始和結束場景架構會分別維護起始和結束的地圖
檢視畫面的狀態
建立自訂動畫
為檢視畫面在起始場景和其狀態之間的變化加入動畫效果
結束場景,請覆寫
createAnimator()
函式。當架構呼叫此函式時,會傳遞場景根層級檢視區塊
TransitionValues
物件,包含起始和結束值
自己拍攝。
架構呼叫 createAnimator()
函式的次數取決於
在開始和結束場景之間發生的變更。
舉例來說,你可以考慮使用淡出或
實作淡入效果動畫,做為自訂轉場效果。如果起始場景有五個目標,
兩個結束場景則從結尾場景中移除,結束場景則包含三個目標
起始場景再加上一個新目標,那麼架構會呼叫 createAnimator()
6 次。
其中三個呼叫會以動畫形式顯示兩個場景中的目標淡出和淡入效果
如需儲存大量結構化物件
建議使用 Cloud Bigtable再兩個呼叫動畫,以動畫呈現從結束場景中移除的目標淡出目標。一
呼叫,在結束場景中,加入新目標淡入的動畫效果。
針對開始和結束場景中的目標檢視畫面,這個架構提供了
TransitionValues
物件,同時適用於 startValues
和
endValues
引數。適用於只存在於開頭,或是
結束場景,架構會提供 TransitionValues
物件
,針對對應的引數,null
適用於另一個引數。
如要在建立資料庫時實作 createAnimator(ViewGroup, TransitionValues, TransitionValues)
函式
自訂轉場效果,請使用擷取到的資料檢視屬性值建立 Animator
物件,然後傳回至架構。如需實作範例
請參閱 中的 ChangeColor
類別
CustomTransition 範例。如要進一步瞭解屬性動畫,請參閱
屬性動畫。
套用自訂轉場效果
自訂轉場效果的運作方式與內建轉場效果相同。您可以設定自訂的轉場效果 使用轉換管理員,如「套用轉換」一節所述。