下面的图表可以帮助您确定要使用哪种 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
等 - 否:
Animatable
与animateTo
的调用时间不同(使用挂起函数)
- 是:是:
- 是:使用
- 否:动画是否具有一组预定义的目标值?
- 是:
animate*AsState
;对于文本,请使用TextMotion.Animated
- 否:手势驱动型动画?动画是唯一的可信来源吗?
- 是:
Animatable
与animateTo
/snapTo
搭配使用 - 否:无状态管理的一次性动画?
- 是:
AnimationState
或animate
- 否:答案不在这里?提交功能请求
- 是:
- 是:
- 是:
- 是:这些媒体资源是否完全独立?
- 是:在具有不同内容的多个可组合项之间切换?
- 是:
- 是:它是否包含简单的 SVG?即包含微动画的图标
下载该图表的 PDF 版本。