MotionLayout 示例

试试 Compose 方式
Jetpack Compose 是推荐用于 Android 的界面工具包。了解如何在 Compose 中使用动画。

本文档包含如何使用 MotionLayout 的示例。每个示例都包含演示相应动作的视频,以及运动场景和布局的相应代码。

基本运动

此示例包含一个视图,您可以轻触并拖动该视图进行水平移动。

图 1. 拖动视图。

自定义属性 - backgroundColor

此示例与基本运动示例类似。除基本运动外,视图的背景颜色也会随着视图的移动而变化。

图 2. 拖动视图时,其背景颜色会发生变化。

ImageFilterView - 图片转换

此示例展示了如何转换 ImageFilterView 的饱和度值。

图 3. 拖动图片时其饱和度发生变化。

关键帧位置

此示例使用 <KeyFrameSet> 在运动过程中更改视图在 Y 轴上的位置。

图 4. 拖动视图并更改其 Y 位置。

关键帧插值

此示例基于关键帧位置示例,在视图转换中添加了旋转和缩放。

图 5. 拖动视图并更改其 Y 位置、旋转和缩放。

关键帧周期

此示例添加了 <KeyCycle> 元素,以便在视图中添加波状运动。

图 6. 拖动视图时,视图会以波浪般的动作移动,同时更改其颜色。

CoordinatorLayout (1/2)

此示例将 MotionLayout 添加到了现有的 AppBarLayout 中,以在应用栏中添加运动。此示例在 MotionLayout 简介(第 III 部分)中进行了详细说明。

图 7. 在应用栏展开时滚动内容。

CoordinatorLayout (2/2)

此示例将 MotionLayout 添加到了现有的 AppBarLayout 中,以在应用栏中添加运动。

图 8. 滚动内容时,应用栏会展开,文本会在应用栏中进出动画效果。

DrawerLayout (1/2)

此示例显示了如何将运动添加到 DrawerLayout 中。此示例在 MotionLayout 简介(第 III 部分)中进行了详细说明。

图 9. 展开 `DrawerLayout`。

DrawerLayout (2/2)

此示例显示了如何将运动添加到 DrawerLayout 中。

图 10. 使用带动画的菜单文本展开 `DrawerLayout`。

侧边栏

此示例显示了如何在将主内容区域拖动到右侧时显示侧边栏。

图 11. 通过拖动主内容来显示侧边栏。

视差

此示例演示了视差背景,其中不同的背景层以不同的速度移动。

图 12. 标题图片中的视差效果。

ViewPager

此示例显示了如何在 ViewPager 标签之间滑动时添加运动。此示例在 MotionLayout 简介(第 III 部分)中进行了详细说明。

图 13. 滑动 `ViewPager` 时标题图片中的视差效果。

ViewPager - Lottie

此示例显示了如何在 ViewPager 标签之间滑动时添加运动。

图 14. 一张图片,显示了在滑动 `ViewPager` 时标题图片中显示 Lottie 效果。

复杂运动 (1/3)

此示例结合了之前示例中的元素来演示复杂运动。

图 15. 组合使用效果来创建复杂的动作。

复杂运动 (2/3)

此示例结合了之前示例中的元素来演示复杂运动。

图 16. 组合使用效果来创建复杂的动作。

复杂运动 (3/3)

此示例结合了之前示例中的元素来演示复杂运动。

图 17. 组合使用效果来创建复杂的动作。

Fragment 转换 (1/2)

此示例展示了如何使用 MotionLayout 在 fragment 之间转换。

图 18. Fragment 转换。

Fragment 转换 (2/2)

此示例展示了如何使用 MotionLayout 在 fragment 之间转换。

图 19. Fragment 转换。

类似 YouTube 的运动

此示例演示了如何在精简视图和带有其他内容的全屏视图之间转换。

图 20. 与 YouTube 类似的 fragment 转换。

KeyTrigger

此示例演示了如何在转换超过进度阈值时显示和隐藏悬浮操作按钮。

图 21. 显示和隐藏悬浮操作按钮。

多状态

此示例显示了如何使用状态来确定要应用哪个运动。

图 22. 基于状态的不同动作。