下面的图表可以帮助您确定要使用哪种 API 来实现您的动画效果。
请使用以下决策树,为您的应用场景选择最合适的 Animation 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 版本。