下圖可協助您決定要使用哪個 API 實作動畫。

請參考下列決策樹,為您的用途選擇最合適的動畫 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
。如為文字,請使用TextMotion.Animated
。 - 否:動畫是否以手勢為主,且是唯一可靠的資料來源?
- 是:
Animatable
與animateTo
/snapTo
。 - 否:是否為不含狀態管理的單拍動畫?
- 是:
AnimationState
或animate
。 - 否:答案不在其中嗎?提出功能要求。
- 是:
- 是:
- 是:
- 是:兩個資源是否完全獨立?
- 是:您是否會在不同內容的可組合項之間切換?
- 是:
- 是:是否使用簡單的 SVG (也就是含有微動畫的圖示)?
下載圖表的 PDF 版本。