MotionLayout 使用说明书(入门级详解)

本文详细介绍MotionLayout动画技术,涵盖从入门到进阶的使用方法,包括动画开始与结束的定义、属性转场动画、关键帧设置等内容,适合初学者及进阶用户。

系列文章

MotionLayout 使用说明书(入门级详解)
MotionLayout 使用说明书(进阶+实战)

准备工作

把大象🐘关进冰箱需要三步,让项目中用上MotionLayout只需两步

第一步:升级constraintlayout 至2.0及以上

 implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1'

写此文时最新版本为 2.0.0-rc1,目前最新版请前往官网查看Constraintlayout更新日志)

第二步:将布局转换为MotionLayout

MotionLayout 是ConstraintLayout 的子类,用ConstraintLayout 写的布局,用MotionLayout也可以。
所有就放心的将ConstraintLayout 转换为MotionLayout 吧
打开布局 在视图预览处或则在Component Tree 栏选中选择ConstraintLayout 右击在菜单栏中点击 Covert to MotionLayout 选项



认识 MotionLayout 工作台

当我们通过上面方式将ConstraintLayout转换为MotionLayout 之后,会帮我们创建一个MotionScene文件 在 res/xml/

文件内容如下

<?xml version="1.0" encoding="utf-8"?>
<MotionScene 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">

    <Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@id/start"
        motion:duration="1000">
       <KeyFrameSet>
       </KeyFrameSet>
    </Transition>

    <ConstraintSet android:id="@+id/start">
    </ConstraintSet>

    <ConstraintSet android:id="@+id/end">
    </ConstraintSet>
</MotionScene>

这个文件和布局关联在一起是通过在布局文件声明的 app:layoutDescription

<androidx.constraintlayout.motion.widget.MotionLayout 
      ……                                                
    app:layoutDescription="@xml/activity_main_scene"
   >

再来看看布局,Android studio(4.0及以上版本) 给我带来一个MotionLayout 可视化的动画编辑工具,如下图所示

普通状态,选中后预览视图显示原始的状态
表示id="start"的ConstraintSet,选中后预览视图显示此约束集的布局,xml 中代码如下

		<ConstraintSet android:id="@+id/start">
    </ConstraintSet>

💡 ConstraintSet 标签 官方解释:“指定所有视图在动画序列中某一点上的位置和属性。通常,一个 Transition元素可指向两个 ConstraintSet 元素,其中一个定义动画序列的开始,另一个定义结束”
我的理解 ConstraintSet 用来存放一些View在某个状态下的约束集和属性

表示id="end"的ConstraintSet,选中后预览视图显示此约束集的布局
表示从start 约束集到end 的转场,对应xml 代码如下

 <Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@id/start"
        motion:duration="1000">
    </Transition>

创建一个新的ConstraintSet
创建一个新的转场Transition
创建触发转场的行为,是点击Click还是滑动swipe

<Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@id/start"
        motion:duration="1000">
        <!-- 点击-->
        <OnClick />
        <!-- 滑动-->
        <OnSwipe />
    </Transition>

仔细看这三个图标还挺形象的

点击后有有个帮助教程

表示约束集的元素

动画的开始与结束

动画,有开始有结束。我们享受的是从开始到结束的过程。

入门一个简单的效果

预览

实现一个简单的矩形平移动画

💡 上图是运行效果,图中虚线表示运动轨迹。要显示运动轨迹的虚线 需要把MotionLayout的showPaths 属性设置为true
app:showPaths="true"

创建动画元素

在布局中创建一个View 如下

<androidx.constraintlayout.motion.widget.MotionLayout 
      ……
    app:layoutDescription="@xml/activity_main_scene"
    app:showPaths="true">

     <View
        android:id="@+id/box"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:background="@color/colorAccent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>
  
</androidx.constraintlayout.motion.widget.MotionLayout>

定义动画开始&结束状态(ConstraintSet)

将id=“box” 的添加到id=“start” 的约束集(ConstraintSet)中
经过上面一波操作,就会在约束集(id=“start”) 中为View(id=“box”) 创建一个新的约束。这一波操作对应的xml 代码如下

 
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值