下面的图表可以帮助您确定要使用哪种 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
等 - 否:使用挂起函数,以不同的时间调用
animateTo
的Animatable
- 支持:支持:
- 支持:
- 否:动画是否具有一组预定义的目标值?
- 支持:
animate*AsState
;对于文字,请使用TextMotion.Animated
- 否:手势驱动的动画?您的动画是唯一的可信来源吗?
- 是:
Animatable
人,animateTo
人,共snapTo
人 - 否:没有状态管理的单次动画?
- 是:
AnimationState
或animate
- 否:没有答案?提交功能请求
- 是:
- 是:
- 支持:
- 是:各个属性是否完全相互独立?
- 是:在内容不同的多个可组合项之间切换?
- 是:
- 是:是否采用简单的 SVG?例如包含微动画的图标
下载图表的 PDF 版本。