You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Jetpack Compose中复刻Figma的Smart Animate过渡效果

Jetpack Compose实现类Figma Smart Animate过渡效果方案

你要的类Figma Smart Animate元素融合过渡效果,在Jetpack Compose里完全可以实现,不需要从零手写全量属性动画,官方提供的现有API已经可以覆盖绝大多数场景。

首选方案:使用官方共享元素过渡API

这个API的底层逻辑和Figma Smart Animate完全一致:自动匹配两个布局中标记了相同key的元素,对位置、尺寸、颜色、透明度等可动画属性自动做插值过渡,不需要手动配置每个属性的动画规则。

配合Navigation Compose使用(最简便)

如果你的页面切换是通过Navigation Compose实现的,只需要两步即可完成效果:

  • 给两个页面中需要做过渡的对应元素(比如你提到的两个不同尺寸的应用栏)添加sharedElement修饰符,指定相同的key值:
// 页面A的应用栏
TopAppBar(
    modifier = Modifier.sharedElement(
        state = rememberSharedContentState(key = "common_top_bar"),
        animatedVisibilityScope = this@AnimatedContentScope
    ),
    // 其他属性配置
)

// 页面B的应用栏
TopAppBar(
    modifier = Modifier.sharedElement(
        state = rememberSharedContentState(key = "common_top_bar"),
        animatedVisibilityScope = this@AnimatedContentScope
    ),
    // 其他属性配置(尺寸、颜色、padding等可以和页面A完全不同)
)
  • 在NavHost的页面切换动画配置中,启用共享元素过渡即可,系统会自动完成应用栏放大/缩小、位置移动的平滑过渡,效果和Figma Smart Animate基本一致。

单页面内布局切换场景

如果是同一个页面内的布局状态切换(比如点击展开应用栏),可以用AnimatedContent包裹布局,同样给对应元素加相同key的sharedElement修饰符,切换状态时就会自动触发过渡效果。

备选方案:使用MotionLayout

如果你的过渡场景涉及多元素复杂联动,可以用Compose版的MotionLayout实现:

  • 只需要定义切换前、切换后两个布局的约束条件
  • 自定义过渡的时长、插值器等参数
  • 运行时自动生成过渡动画,操作逻辑和Figma中设置两个帧做Smart Animate几乎完全一致,可定制性更高。

注意事项

  • 如果两个目标元素的内部子组件存在差异,可以给子组件也分别设置对应的共享key,系统会自动处理子组件的淡入淡出、位移过渡,避免出现内容跳变
  • 有特殊动画要求时,只需要给sharedElement的animationSpec参数传入自定义的spring/tween配置即可,不需要修改其他逻辑
  • 页面其他非共享元素可以搭配正常的滑入、淡入等整体过渡效果,不会影响共享元素的独立过渡

内容的提问来源于stack exchange,提问作者dbarnes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:24:08