下圖可協助您決定要使用哪個 API 實作動畫。
請按照下方決策樹的提問,選擇最適合您用途的動畫 API:
- 我的動畫是否更像藝術作品,包含許多視覺元素?例如 SVG 或圖片
- 是:是否有簡單的 SVG?也就是含有微動畫的圖示
- 是:
AnimatedVectorDrawable
- 否:第三方動畫架構,例如
Lottie
- 是:
- 否:是否需要永久重複執行這項動作?
- 是:
rememberInfiniteTransition
- 否:這是版面配置動畫嗎?
- 是:要變更含有不同內容的多個可組合項嗎?
- 是:使用 navigation-compose?
- 是:
composable()
,已設定enterTransition
和exitTransition
- 否:
AnimatedContent
、Crossfade
或Pager
- 是:
- 否:為外觀 / 消失動畫效果加上動畫效果?
- 是:
AnimatedVisibility
或animateFloatAsState
搭配Modifier.alpha()
- 否:要為大小加入動畫效果嗎?
- 是:
Modifier.animateContentSize
- 否:其他版面配置屬性?例如偏移、邊框等
- 是:請參閱「資源是否完全獨立?」
- 否:清單項目動畫?
- 是:
animateItemPlacement()
(重新排序和刪除功能即將推出)
- 是:
- 是:
- 是:
- 是:使用 navigation-compose?
- 否:您是否需要為多個資源製作動畫?
- 是:兩個資源是否完全獨立?
- 是:
animate*AsState
,如果是文字,請使用TextMotion.Animated
- 否:是否要同時開始?
- 是:是:
updateTransition
和AnimatedVisibility
、animateFloat
、animateInt
等 - 否:
Animatable
與animateTo
在不同時間點呼叫 (使用暫停函式)
- 是:是:
- 是:
- 否:動畫是否有一組預先定義的目標值?
- 是:
animate*AsState
;如要傳送文字,請使用TextMotion.Animated
- 否:手勢驅動動畫?動畫是否為可靠來源?
- 是:
Animatable
與animateTo
/snapTo
- 否:沒有狀態管理的單拍動畫?
- 是:
AnimationState
或animate
- 否:答案不在其中嗎?提出功能要求
- 是:
- 是:
- 是:
- 是:兩個資源是否完全獨立?
- 是:要變更含有不同內容的多個可組合項嗎?
- 是:
- 是:是否有簡單的 SVG?也就是含有微動畫的圖示
下載圖表的 PDF 版本。