公司动态
一文读懂 material-motion-compose 的五大 Material Motion 动效模式:从概念到实战
一文读懂 material-motion-compose 的五大 Material Motion 动效模式从概念到实战【免费下载链接】material-motion-composeMaterial Motion for Jetpack Compose and Compose Multiplatform项目地址: https://gitcode.com/gh_mirrors/ma/material-motion-compose如果你正在用 Jetpack Compose 或 Compose Multiplatform 开发应用却苦于页面切换动画生硬、手写动画代码繁琐那么material-motion-compose绝对值得你花五分钟了解一下。它是 Material Motion 动效系统的 Compose 实现库把 Material Design 官方定义的动效模式Shared Axis、Fade Through、Fade、Elevation Scale、Hold打包成开箱即用的 API只需几行代码就能让 App 拥有专业、流畅的页面过渡体验。什么是 Material Motion 动效系统Material Design 在 2018 年推出了「The Motion System」动效规范目标是让界面元素的移动、缩放、淡入淡出遵循统一的物理规律帮助用户理解元素之间的空间与层级关系。官方在 View 体系下有对应的实现而material-motion-compose则把同一套规范带到了 Jetpack Compose 与 Compose Multiplatform支持 Android、Desktop JVM、iOS、Wasm 四个平台让 KMP 项目也能共用一套动效代码。项目核心源码位于 core/src/commonMain/kotlin/soup/compose/material/motion/详细的动效对照与用法文档可以参考 docs/core.md每个动效都配有实时演示动图。动效模式一Shared Axis 共享轴——页面导航的首选Shared Axis 是页面跳转最常见的动效新旧页面沿同一根轴移动并淡入淡出视觉连贯性极强。库提供了 X、Y、Z 三个方向轴方向效果演示典型场景X 轴水平列表到详情、同级页面切换Y 轴垂直层级向下钻取、展开面板Z 轴深度强调层级关系的进出场使用MaterialSharedAxisX即可快速接入核心实现参考 MaterialSharedAxis.ktval (screen, onScreenChanged) remember { mutableStateOf(...) } MaterialSharedAxisX(targetState screen, forward true) { newScreen - // 根据 newScreen 渲染对应页面 }滑动距离默认 30dp定义在 MotionConstants.kt需要时可通过slideDistance参数调整。动效模式二Fade Through 淡入过渡——Tab 切换的优雅之选Fade Through 的视觉特点是「内容几乎不动只有透明度变化」适合信息层级平行的场景比如底部导航的 Tab 切换。它不会让用户产生「页面在移动」的错觉观感非常克制、优雅。MaterialFadeThrough(targetState screen) { newScreen - // 渲染对应 Tab 内容 }对应入口为 MaterialFadeThrough.kt动画规格在 animation/MaterialFadeThrough.kt 中定义。动效模式三Fade 淡入淡出——元素显隐的轻量方案Fade 用于控制单个内容的显示与隐藏例如加载状态、错误提示、弹层的出现与消失。它比 Fade Through 更轻量只作用于visible布尔值不涉及页面切换。MaterialFade(visible visible) { // 需要显隐的内容 }实现基于 Compose 的AnimatedVisibility默认进入 150ms、退出 75ms见 MaterialFade.kt。动效模式四Elevation Scale 高度缩放——卡片聚焦的立体感Elevation Scale 通过缩放 淡入淡出制造「从表面浮起」的立体感非常适合卡片、对话框、全屏预览等强调层级抬升的场景让焦点元素自然地从背景中「长」出来。MaterialMotion( targetState screen, motionSpec { materialElevationScaleIn() with materialElevationScaleOut() } ) { newScreen - ... }动效模式五Hold 保持——极简的「无动画」过渡Hold 的意思是「保持现状」内容在切换期间原地停留、不做任何位移动画。它适合需要快速切换、不希望用户被动画干扰的场景比如数值刷新、轮播切换。代码实现也非常巧妙——进入时从透明度 1 开始退出时停在 0.999见 Hold.kt。加餐Circular Reveal 圆形揭示——惊喜的隐藏技能除了五大动效模式库还附带一个很好玩的Modifier.circularReveal支持从任意圆点默认是中心以圆形裁剪的方式揭示内容常用于相册、隐私内容等场景。通过center参数可以指定扩散起点Box(modifier Modifier.circularReveal( visible visible, center { fullSize - Offset(0f, 0f) } // 从左上角扩散 )) { ... }实现源码在 CircularReveal.kt。实战进阶用 MaterialMotion 统一编排动效如果觉得逐个 API 不够灵活库还提供了统一入口MaterialMotion配合motionSpec可以按状态自由组合不同的动效甚至支持按targetState条件分流前进用 Shared Axis、返回用 Fade Through并可用pop参数控制反向动画MaterialMotion( targetState screen, motionSpec { when (targetState) { is Detail - materialSharedAxisX(forward true, slideDistance slideDistance) else - materialFadeThroughIn() with materialFadeThroughOut() } } ) { newScreen - ... }统一入口实现见 MaterialMotion.kt。所有动效的时长也可直接传入覆盖默认值比如materialFadeThrough(durationMillis 300)常量默认值集中定义在 MotionConstants.kt。快速接入步骤在项目的settings.gradle仓库配置中加入mavenCentral()。在依赖中添加io.github.fornewid:material-motion-compose-core:version。如需本地体验完整示例可git clone https://gitcode.com/gh_mirrors/ma/material-motion-compose仓库中的 sample/ 目录包含 Android、Desktop、iOS、Wasm 四个平台的完整 Demo动效编排逻辑可参考 shared/。总结material-motion-compose 用最少的 API 覆盖了 Material Motion 动效规范的核心Shared Axis 负责页面导航、Fade Through 负责 Tab 切换、Fade 负责元素显隐、Elevation Scale 负责层级抬升、Hold 负责极简过渡加上 Circular Reveal 彩蛋足以应对绝大多数界面动效需求。跨平台特性更是让它成为 Compose Multiplatform 项目的加分项。还在等什么动手为你的 App 加一套丝滑的 Material Motion 动效吧【免费下载链接】material-motion-composeMaterial Motion for Jetpack Compose and Compose Multiplatform项目地址: https://gitcode.com/gh_mirrors/ma/material-motion-compose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考