下面的图表将帮助您决定使用哪个 API 来实现您的动画。
按照下面的决策树问题来选择最适合您的用例的动画 API
- 我的动画更像是艺术,包含很多视觉元素吗?例如 SVG 或图片
- 是:它有简单的 SVG 吗?例如带微动画的图标
- 是:
AnimatedVectorDrawable
- 否:第三方动画框架,例如
Lottie
- 是:
- 否:它需要无限循环吗?
- 是:
rememberInfiniteTransition
- 否:这是布局动画吗?
- 是:在具有不同内容的多个可组合项之间切换?
- 是:使用导航-compose?
- 是:
composable()
,并设置enterTransition
和exitTransition
- 否:
AnimatedContent
、Crossfade
或Pager
- 是:
- 否:正在对外观/消失进行动画处理吗?
- 是:
AnimatedVisibility
或animateFloatAsState
,使用Modifier.alpha()
- 否:正在对大小进行动画处理吗?
- 是:
Modifier.animateContentSize
- 否:其他布局属性?例如偏移量、填充等
- 是:请参阅“这些属性是否完全相互独立?”
- 否:列表项动画?
- 是:
animateItemPlacement()
(重新排序和删除即将推出)
- 是:
- 是:
- 是:
- 是:使用导航-compose?
- 否:您需要对多个属性进行动画处理吗?
- 是:这些属性是否完全相互独立?
- 是:
animate*AsState
,对于文本,使用TextMotion.Animated
- 否:从同一时间开始吗?
- 是:是:
updateTransition
,使用AnimatedVisibility
、animateFloat
、animateInt
等 - 否:
Animatable
,使用animateTo
(使用挂起函数)调用不同的时序
- 是:是:
- 是:
- 否:动画是否有一组预定义的目标值?
- 是:
animate*AsState
,对于文本,使用TextMotion.Animated
- 否:手势驱动的动画?您的动画是唯一的事实来源?
- 是:
Animatable
,使用animateTo
/snapTo
- 否:一次性动画,无需状态管理?
- 是:
AnimationState
或animate
- 否:这里没有答案?提交功能请求
- 是:
- 是:
- 是:
- 是:这些属性是否完全相互独立?
- 是:在具有不同内容的多个可组合项之间切换?
- 是:
- 是:它有简单的 SVG 吗?例如带微动画的图标
下载图表 PDF 版本。