下面的图表可以帮助您确定要使用哪种 API 来实现您的动画效果。

使用以下决策树为您的使用情形选择最合适的动画 API:
- 您的动画是基于美术素材(即 SVG 或图片)的吗?
- 是:它是否使用简单的 SVG(即带有微动画的图标)?
- 有:
AnimatedVectorDrawable
。 - 否:第三方动画框架,例如
Lottie
。
- 有:
- 否:动画是否需要无限循环播放?
- 有:
rememberInfiniteTransition
。 - 否:您是否要为布局添加动画效果?
- 是:您是否在具有不同内容的可组合项之间切换?
- 是:您是否在使用 Navigation-Compose?
- 可以:
composable()
,并设置了enterTransition
和exitTransition
。 - 否:
AnimatedContent
、Crossfade
或Pager
。
- 可以:
- 否:您是否要为内容的出现或消失添加动画效果?
- 可以:
AnimatedVisibility
或animateFloatAsState
与Modifier.alpha()
搭配使用。 - 否:您是否要为大小变化添加动画效果?
- 有:
Modifier.animateContentSize
。 - 否:您是否正在为其他布局属性(例如偏移或内边距)添加动画效果?
- 是:请参阅“这些房源是否完全彼此独立?”。
- 否:您是否要为列表项添加动画效果?
- 有:
- 可以:
- 是:您是否在使用 Navigation-Compose?
- 否:您是否要为多个属性添加动画效果?
- 是:属性是否完全相互独立?
- 有:
animate*AsState
。对于文本,请使用TextMotion.Animated
。 - 否:它们是否需要同时开始?
- 可以:
updateTransition
,包含AnimatedVisibility
、animateFloat
、animateInt
等。 - 否:
Animatable
与animateTo
搭配使用,使用挂起函数以不同时间调用。
- 可以:
- 有:
- 否:动画是否具有预定义的目标值?
- 有:
animate*AsState
。对于文本,请使用TextMotion.Animated
。 - 否:动画是否由手势驱动,并且是唯一可信来源?
- 是:
Animatable
,带有animateTo
/snapTo
。 - 否:是否为不含状态管理的一次性动画?
- 是:
AnimationState
或animate
。 - 否:此处未提供解答?提交功能请求。
- 是:
- 是:
- 有:
- 是:属性是否完全相互独立?
- 是:您是否在具有不同内容的可组合项之间切换?
- 有:
- 是:它是否使用简单的 SVG(即带有微动画的图标)?
下载图表的 PDF 版本。