MotionLayout
ConstraitLayout子类。在2.0时代添加,动画过渡。
涉及的东西有:
-
MotionScene
-
Transition
- OnSwipe
- OnClick
- KeyFrameSet
-
ConstraintSet
位置res-xml,添加(例如,scene_youtube.xml)
MotionScene 作为根目录
Transition 作为动画控制点。一般里面会有2个ConstraintSet 。分别控制动画开始状态和结束状态
Transition
- constraintSetEnd 记录动画结束的布局文件结构
- constraintSetStart 记录动画开始时的布局文件结构
- duration 过度时间
- motionInterpolator 动画差值器
//Transition.java
private int mId = -1;
private boolean mIsAbstract = false;
private int mConstraintSetEnd = -1;
private int mConstraintSetStart = -1;
private int mDefaultInterpolator = 0;
private String mDefaultInterpolatorString = null;
private int mDefaultInterpolatorID = -1;
private int mDuration = 400;
private float mStagger = 0.0F;
private final MotionScene mMotionScene;
private ArrayList<KeyFrames> mKeyFramesList = new ArrayList();
private TouchResponse mTouchResponse = null;
private ArrayList<MotionScene.Transition.TransitionOnClick> mOnClicks = new ArrayList();
private int mAutoTransition = 0;
public static final int AUTO_NONE = 0;
public static final int AUTO_JUMP_TO_START = 1;
public static final int AUTO_JUMP_TO_END = 2;
public static final int AUTO_ANIMATE_TO_START = 3;
public static final int AUTO_ANIMATE_TO_END = 4;
private boolean mDisable = false;
private int mPathMotionArc = -1;
private int mLayoutDuringTransition = 0;
private int mTransitionFlags = 0;
static final int TRANSITION_FLAG_FIRST_DRAW = 1;
OnSwipe
用户在布局上滑动,要执行的操作
- touchAnchorId 滑动时,要操作的视图ID
- touchAnchorSide 滑动所固定到的目标视图的一侧。MotionLayout 将尝试在该固定点与用户手指之间保持恒定的距离。可接受的值包括 “left”、“right”、“top” 和 “bottom”。
- dragDirection 用户滑动动作的方向。如果设置了此属性,此 onSwipe 将仅适用于沿特定方向的滑动。可接受的值包括 “dragLeft”、“dragRight”、“dragUp” 和 “dragDown”。
- maxAcceleration** 目标视图的最大加速度。
- dragScale 控制视图相对于滑动长度的移动距离。默认值为 1,表明视图移动的距离应与滑动距离一致。
OnClick
用户在布局上点击,要执行的操作
- targetId 受监控的视图。当用户点按此视图时,将会发生转换。
- ClickAction 点按视图时要执行的操作。
KeyFrameSet
关键帧可以包含多个KeyPosition与多个KeyAttribute
KeyPosition
视图在运动序列中特定时刻的位置。该属性用于调整默认的运动路径。
比如 运动到30%,50%时候的状态,位置等。
- motionTarget 。需要作出改变的视图ID
- framePosition 。取值范围【1-99】。用于指定运动序列中视图何时到达此 指定的点。
- percentX & percentY 指定视图应到达的位置。
- keyPositionType
属性指定如何操作这些值。 - parentRelative percentX 和 percentY 是相对于父视图
- deltaRelative percentX 和 percentY 是相对于视图在整个运动序列过程中移动的距离
KeyAttribute
设置关键帧的控制视图的标准属性例如: visibility,alpha,elevation,rotation,等…
- motionTarget 需要作出改变的视图Id.
- framePosition。取值范围【1-99】。,用于指定运动序列中视图何时到达此 指定的点。
- View的各种标准属性,android:visibility,alpha等
ConstraintSet
指定所有视图在动画序列中某一点上的位置和属性。通常,一个 元素可指向两个 元素,其中一个定义动画序列的开始,另一个定义结束。
指定运动序列其中一个元素的位置和属性。元素支持一组标准 ConstraintLayout 属性
- id 绑定的View Id
CustomAttribute
位于Constraint下的标签,表示自定义属性
-
attributeName 例如:app:attributeName=“BackgroundColor” 表示该view的背景颜色需要改变
(对应的控件,必须提供get/set方法–待验证) -
customColorValue 例如:app:customColorValue="#FF0000"背景颜色红色
未完待续…