下圖可協助您決定要使用哪個 API 實作動畫。
請根據以下決策樹狀圖問題,選擇最適合您用途的動畫 API:
- 我的動畫是否像是圖片,由許多視覺元素組成?例如 SVG 或圖片
- 是:圖片是否含有簡單的 SVG?例如帶有微動畫的圖示
- 是:
AnimatedVectorDrawable
- 否:第三方動畫架構,例如:
Lottie
- 是:
- 否:是否需要永久複製?
- 是:
rememberInfiniteTransition
- 否:這是版面配置動畫嗎?
- 是:變更含有不同內容的多個可組合項嗎?
- 是:使用 Navigation 撰寫功能嗎?
- 是:
composable()
已設定enterTransition
和exitTransition
- 否:
AnimatedContent
、Crossfade
或Pager
- 是:
- 否:動畫出現 / 消失的動畫效果?
- 是:
AnimatedVisibility
或animateFloatAsState
與Modifier.alpha()
- 否:要為大小加上動畫效果嗎?
- 是:
Modifier.animateContentSize
- 否:其他版面配置屬性、例如偏移、邊框間距等
- 是:請參閱「房源是否完全獨立?」一文
- 否:清單項目動畫?
- 是:
animateItemPlacement()
(你很快就會重新排序並刪除)
- 是:
- 是:
- 是:
- 是:使用 Navigation 撰寫功能嗎?
- 否:您是否需要為多個屬性建立動畫?
- 是:這兩項屬性是否完全獨立?
- 是:
animate*AsState
適用於文字,請使用TextMotion.Animated
- 否:在同一時間開始?
- 是:是:
updateTransition
對象:AnimatedVisibility
、animateFloat
、animateInt
等 - 否:使用
animateTo
呼叫不同時間的Animatable
(使用暫停函式)
- 是:是:
- 是:
- 否:動畫是否包含一組預先定義的目標值?
- 是:
animate*AsState
適用於文字,請使用TextMotion.Animated
- 否:手勢驅動的動畫動畫是唯一的來源嗎?
- 是:
Animatable
(animateTo
/snapTo
) - 否:沒有狀態管理模式的相片動畫?
- 是:
AnimationState
或animate
- 否:沒在這裡回答嗎?提出功能要求
- 是:
- 是:
- 是:
- 是:這兩項屬性是否完全獨立?
- 是:變更含有不同內容的多個可組合項嗎?
- 是:
- 是:圖片是否含有簡單的 SVG?例如帶有微動畫的圖示
下載圖表的 PDF 版本。