发布时间:2026/8/20 20:22:04
material-motion-compose 核心组件 MaterialMotion 完全教程:基于 AnimatedContent 的页面切换动画 material-motion-compose 核心组件 MaterialMotion 完全教程基于 AnimatedContent 的页面切换动画【免费下载链接】material-motion-composeMaterial Motion for Jetpack Compose and Compose Multiplatform项目地址: https://gitcode.com/gh_mirrors/ma/material-motion-compose想给 Jetpack Compose 应用加上丝滑的页面切换动画却不想手写一堆 Transition 状态管理代码material-motion-compose 正是为此而生的开源动效库它是 Material Motion 官方动效规范在 Jetpack Compose 与 Compose Multiplatform 上的完整实现同时支持 Android、iOS、桌面端与 WebWasm四大平台。本文将带你全面掌握它的核心组件 MaterialMotion——一个基于 AnimatedContent 封装的高阶组件只需切换一个状态值即可自动完成旧页面淡出、新页面淡入的整套过渡动画。material-motion-compose 是什么一套开箱即用的动效方案material-motion-compose 把 Material Design 动效系统中定义的几种经典动效模式Shared Axis、Fade Through、Fade、Elevation Scale、Hold全部封装成了可直接调用的组件与动画函数。你不需要关心插值器、动画时长、Z 轴层级这些底层细节框架已经按官方规范帮你配好了默认值动效模式组件/函数适用场景共享轴 X/Y/ZmaterialSharedAxisX/Y/Z同级页面切换表达空间位置关系淡入淡出过渡materialFadeThrough层级无关的页面内容更新纯淡入淡出MaterialFade显示/隐藏某个内容区域抬升缩放materialElevationScaleIn/Out强调内容层级关系如弹窗、详情页停顿保持holdIn/holdOut转场中保持画面适合与退出动画组合其中MaterialMotion是最核心的通用入口几乎所有动效模式都可以通过它来驱动。MaterialMotion 核心原理AnimatedContent 的一层优雅封装看源码会发现MaterialMotion本质上是对 Compose 自带的AnimatedContent的封装内部通过updateTransition维护状态当传入的targetState发生变化时自动触发内容切换动画并额外处理了正向/反向播放时的内容层级targetContentZIndex问题保证前进时新页面盖在旧页面之上、返回时顺序反转。核心源码位于core/src/commonMain/kotlin/soup/compose/material/motion/MaterialMotion.kt其参数设计非常贴近实际开发targetState切换动画的触发键改变它就会播放动画transitionSpec配置进入/退出动画的ContentTransformpop是否反向播放返回操作时传 truecontentKey指定内容标识用于精确复用某个页面label便于在 Android Studio 布局检查器中区分动画。快速开始三步接入 MaterialMotion第一步添加依赖。在build.gradle.kts中加入repositories { mavenCentral() } dependencies { implementation(io.github.fornewid:material-motion-compose-core:version) }第二步编写最简页面切换。定义一个状态然后用MaterialMotion包住页面内容val (screen, onScreenChanged) remember { mutableStateOf(0) } MaterialMotion( targetState screen, transitionSpec { materialFadeThrough() } ) { current - when (current) { 0 - HomePage(onClick { onScreenChanged(1) }) 1 - DetailPage(onClick { onScreenChanged(0) }) } }第三步改变状态触发动画。点击按钮更新screen的值页面就会自动播放 fade through 过渡。如果想要手动体验完整示例可以克隆官方仓库git clone https://gitcode.com/gh_mirrors/ma/material-motion-compose运行sample/下的示例工程查看每种动效的实时效果。核心用法一用 targetState 驱动任意页面切换动画MaterialMotion最大的优势是状态与动画解耦你只需要维护一个状态值动画完全由组件接管。无论是整页切换、Tab 内容切换还是列表项展开思路都一样——把想显示什么作为targetState。val (forward, onForwardChanged) remember { mutableStateOf(false) } MaterialMotion( targetState forward, transitionSpec { materialSharedAxisX(forward forward, slideDistance slideDistance) }, pop forward.not() ) { isForward - ForwardBackwardContents(isForward) }这段代码来自示例工程的sample/shared/src/commonMain/kotlin/soup/compose/material/motion/shared/material/sharedaxis/MaterialSharedAxisScreen.kt它用一个布尔值在前进/后退两个界面之间切换并配合pop参数实现了返回时动画自动反转——这在实际 App 的页面栈导航中非常实用。核心用法二transitionSpec 的五大经典动效模式transitionSpec是 MaterialMotion 的灵魂它可以返回任意ContentTransform。框架内置了 Material 规范定义的几种现成组合共享轴切换动画Shared AxismaterialSharedAxisX让新页面从侧向滑入materialSharedAxisY是上下滑动materialSharedAxisZ则是缩放淡入新页面从 80% 放大到 100%表达空间层级变化的关系。淡入淡出过渡Fade ThroughmaterialFadeThrough让新内容先放大淡入、旧内容快速淡出适合列表刷新、Tab 切换这类层级无关的内容变化观感最柔和。抬升缩放与停顿保持MaterialMotion( targetState screen, transitionSpec { materialElevationScaleIn() with materialElevationScaleOut() } ) { current - ... }materialElevationScaleIn/Out模拟内容从纸面抬升的效果用于强调新内容的层级holdIn/holdOut则让画面保持静止常与其他退出动画组合使用。这些动画函数的定义都位于core/src/commonMain/kotlin/soup/compose/material/motion/animation/目录下源码清晰易读非常适合作为自定义动画的参考模板。进阶技巧按状态切换不同动画与时长自定义实际项目中不同页面切换往往需要不同动效。MaterialMotion支持在transitionSpec内根据当前状态动态选择动画MaterialMotion( targetState screen, transitionSpec { when (targetState) { is Home - materialSharedAxisY(forward true, slideDistance slideDistance) is Detail - materialFadeThroughIn() with materialFadeThroughOut() else - materialElevationScaleIn() with materialElevationScaleOut() } }, pop false ) { newScreen - ... }调整动画节奏也很简单直接传入毫秒时长即可val motionSpec materialFadeThrough(durationMillis 300)所有默认值集中定义在core/src/commonMain/kotlin/soup/compose/material/motion/MotionConstants.kt中默认时长 300ms、淡入 150ms、淡出 75ms、滑动距离 30dp你也可以参考它统一管理自己的动效参数。另外rememberSlideDistance()会把 dp 单位的滑动距离按当前屏幕密度换算为像素在slideDistance参数中直接使用即可。在 Navigation 导航中集成页面切换动画如果你用的是 Navigation Compose也可以直接复用这套动效函数。参考示例工程的sample/shared/src/commonMain/kotlin/soup/compose/material/motion/shared/navigation/AnimatedNavHostScreen.ktNavHost( navController navController, startDestination first, enterTransition { materialSharedAxisXIn(forward true, slideDistance slideDistance) }, exitTransition { materialSharedAxisXOut(forward true, slideDistance slideDistance) }, popEnterTransition { materialSharedAxisXIn(forward false, slideDistance slideDistance) }, popExitTransition { materialSharedAxisXOut(forward false, slideDistance slideDistance) } ) { ... }这样就把 Material Motion 动效无缝融入了导航体系前进与返回动画自动区分方向体验与 Material 设计规范保持完全一致。总结一套动效四个平台通吃material-motion-compose 的MaterialMotion组件让你用极少的代码获得符合 Material 规范的专业页面切换动画状态驱动、动效可定制、支持反向播放并且天然跨 Android / iOS / Desktop / Wasm 四大平台。对于追求高完成度交互体验的 Compose 开发者来说它几乎是开箱即用的最佳选择。建议从克隆仓库运行示例工程开始逐个体验五种动效模式再对照源码理解封装逻辑很快你就能在自己的项目里做出媲美原生 Material 应用的流畅转场效果。【免费下载链接】material-motion-composeMaterial Motion for Jetpack Compose and Compose Multiplatform项目地址: https://gitcode.com/gh_mirrors/ma/material-motion-compose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/20 21:37:10

【Vue 功能总结】本地持久化

目录 需求: 核心点: 1. localStorage.setItem(key, value):存 2. localStorage.getItem(key):取 3. localStorage.getItem(key):删(清除) 补充:localStorage 的核心特性 分析实现步骤: 1. 持久化到本地 - 封装方法 2. 页面中调用 - 实现持久化 需求: 例如:…

2026/8/20 21:32:10

JAVA学习笔记-Java并发编程

学习目标:了解Java基础知识掌握 Java 并发编程常见问题和面试场景基础1.并行跟并发有什么区别?并行是多核 CPU 上的多任务处理,多个任务在同一时间真正地同时执行。并发是单核 CPU 上的多任务处理,多个任务在同一时间段内交替执行…

2026/8/20 10:17:13

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/20 20:11:18

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/20 0:01:41

Cline、Hermes、OpenClaw 都能连:HTTP 型 MCP 客户端全适配

后台被问得最多的一类问题是:“我用的是 Cline / Hermes / OpenClaw,能连察元的 WPS 文档服务吗?” 统一回答:能。而且这个"都能连"值得单独写一篇——不是我们挨个给每个客户端做了适配,而是所有这些客户端…

2026/8/20 0:01:41

46 个文档工具一次看懂:察元AI文档助手 MCP 工具目录速览

把察元AI文档助手接进 Claude Code 之后,我建议的第一件事不是急着下提示词,而是把它的 MCP 工具目录过一遍——46 个工具(MCP 目录版本 0.10.0),乍看吓人,其实按"一份文档的生命周期"分组之后非…

2026/8/20 8:35:23

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/20 9:15:29

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/19 16:39:34

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…