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