下圖可協助您決定要使用哪個 API 實作動畫。
請參考下列決策樹,根據用途選擇最合適的 Animation API:
- 動畫是否以美術為基礎 (即 SVG 或圖片)?
- 是:是否使用簡單的 SVG (即含有微動畫的圖示)?
- 是:
AnimatedVectorDrawable。 - 否:第三方動畫架構,例如
Lottie。
- 是:
- 否:動畫是否需要無限重複播放?
- 是:
rememberInfiniteTransition。 - 否:您是否要為版面配置建立動畫?
- 是:您是否要在不同內容的可組合項之間切換?
- 是:您是否使用 Navigation-Compose?
- 是:
composable(),已設定enterTransition和exitTransition。 - 否:
AnimatedContent、Crossfade或Pager。
- 是:
- 否:您是否要建立內容顯示或消失的動畫?
- 是:
AnimatedVisibility或animateFloatAsState搭配Modifier.alpha()。 - 否:您是否要為大小變化製作動畫?
- 是:
Modifier.animateContentSize。 - 否:您是否要為其他版面配置屬性 (例如偏移或邊框間距) 建立動畫?
- 是:請參閱「資源是否完全獨立?」一節。
- 否:您是否要為清單項目加入動畫效果?
- 是:
- 是:
- 是:您是否使用 Navigation-Compose?
- 否:您是否要為多個屬性加上動畫效果?
- 是:這些屬性是否完全獨立?
- 是:
animate*AsState。文字請使用TextMotion.Animated。 - 否:需要同時開始嗎?
- 是:
updateTransition搭配AnimatedVisibility、animateFloat、animateInt等。 - 否:
Animatable搭配animateTo,使用暫停函式在不同時間呼叫。
- 是:
- 是:
- 否:動畫是否有預先定義的目標值?
- 是:
animate*AsState。在「Text」部分,使用TextMotion.Animated。 - 否:動畫是否由手勢驅動,且為單一事實來源?
- 是:
Animatable,animateTo/snapTo。 - 否:是否為沒有狀態管理的一次性動畫?
- 是:
AnimationState或animate。 - 否:找不到答案嗎?提出功能要求。
- 是:
- 是:
- 是:
- 是:這些屬性是否完全獨立?
- 是:您是否要在不同內容的可組合項之間切換?
- 是:
- 是:是否使用簡單的 SVG (即含有微動畫的圖示)?
下載圖表的 PDF 版本。