動畫可以加入視覺提示,讓使用者知道應用程式的目前情況。在使用者介面變更狀態時 (例如載入新內容或有新操作時),這種功能就特別實用。動畫還能為應用程式增添細緻的視覺效果,提升應用程式的外觀與風格。
Android 包含不同的動畫 API,具體取決於您想要的動畫類型。這份文件提供總覽,說明在 UI 中加入動態效果的不同方式。
如要進一步瞭解動畫的使用時機,請參閱 Material Design 動作指南。
為點陣圖製作動畫
圖 1. 可繪項目動畫。
如要為點陣圖形 (例如圖示或插圖) 製作動畫,請使用可繪製動畫 API。這些動畫通常是使用可繪項目資源靜態定義,但您也可以在執行階段定義動畫行為。
舉例來說,如要向使用者說明兩個動作相關,可以讓播放按鈕在輕觸時變形為暫停按鈕。
詳情請參閱「以動畫方式呈現可繪項目圖形」。
為 UI 顯示設定和動作製作動畫
圖 2. 對話方塊顯示和消失時的細微動畫,可減少 UI 變化帶來的突兀感。
如要變更版面配置中檢視區塊的可見性或位置,最好加入細微的動畫,協助使用者瞭解 UI 的變化。
如要在目前版面配置中移動、顯示或隱藏檢視區塊,可以使用 android.animation
套件提供的屬性動畫系統,適用於 Android 3.0 (API 級別 11) 以上版本。這些 API 會在一段時間內更新 View
物件的屬性,並在屬性變更時持續重新繪製檢視區塊。舉例來說,當您變更位置屬性時,檢視區塊會在畫面上移動。變更 Alpha 屬性時,檢視畫面會淡入或淡出。
如要以最簡單的方式建立這些動畫,請在版面配置中啟用動畫,這樣當您變更檢視區塊的顯示狀態時,系統就會自動套用動畫。詳情請參閱「自動為版面配置更新項目加上動畫效果」。
如要瞭解如何使用屬性動畫系統建構動畫,請參閱「屬性動畫總覽」。您也可以參閱下列頁面,瞭解如何建立常見動畫:
以物理為基礎的動作
圖 3. 使用 ObjectAnimator 建構的動畫。
圖 4. 以物理為基礎的 API 建構動畫。
請盡可能在動畫中套用真實世界的物理效果,讓動畫看起來更自然。舉例來說,當目標變更時,他們應維持動能,並在任何變更期間順利轉換。
為提供這些行為,Android 支援程式庫包含以物理為基礎的動畫 API,可依據物理定律控制動畫的發生方式。
以下是兩種常見的物理動畫:
並非以物理為基礎的動畫 (例如使用 ObjectAnimator
API 建構的動畫) 相當靜態,且持續時間固定。如果目標值有所變更,您必須在目標值變更時取消動畫,以新值做為新的起始值重新設定動畫,然後新增新的目標值。從視覺上來看,這個程序會突然停止動畫,然後出現不連貫的動作,如圖 3 所示。
以物理為基礎的動畫 API (例如 DynamicAnimation
) 建構的動畫是由力驅動。目標值的變化會導致力道變化。新的力會套用至現有速度,使速度持續過渡至新目標。如圖 4 所示,這項程序可產生更自然的動畫。
以動畫呈現版面配置變更
圖 5. 如要顯示更多詳細資料的動畫,可以變更版面配置或啟動新活動。
在 Android 4.4 (API 級別 19) 以上版本中,您可以使用轉場效果架構,在目前活動或片段中切換版面配置時建立動畫。您只需要指定開始和結束的版面配置,以及要使用的動畫類型。然後系統會找出並執行這兩個版面配置之間的動畫。您可以藉此替換整個 UI,或只移動/取代部分檢視畫面。
舉例來說,當使用者輕觸項目以查看更多資訊時,您可以將版面配置替換為項目詳細資料,並套用如圖 5 所示的轉場效果。
開始和結束的版面配置會分別儲存在 Scene
中,不過開始場景通常會根據目前的版面配置自動決定。您會建立 Transition
,告知系統您要的動畫類型,然後呼叫 TransitionManager.go()
,系統就會執行動畫來切換版面配置。
詳情請參閱「使用轉場效果以動畫呈現版面配置變更」。如需程式碼範例,請參閱「BasicTransition」。
活動間的動畫
在 Android 5.0 (API 級別 21) 以上版本中,您也可以建立活動之間的轉場動畫。這項功能採用上一節所述的相同轉場效果架構,但可讓您在不同活動之間建立版面配置動畫。
您可以套用簡單的動畫,例如從側邊滑入或淡入新活動,也可以建立動畫,在每個活動中轉換共用檢視區塊。舉例來說,當使用者輕觸項目查看更多資訊時,您可以轉換至新活動,並以動畫讓該項目順暢放大,填滿整個畫面,如圖 5 所示。
如常呼叫
startActivity()
,
但傳遞 ActivityOptions.makeSceneTransitionAnimation()
提供的一組選項。
這組選項可能包含活動之間共用的檢視畫面,因此轉換架構可以在動畫期間連結這些檢視畫面。
如需其他資源,請參閱: