MotionLayout详解-基础使用

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"背景颜色红色

未完待续…

猜你喜欢

转载自blog.csdn.net/ecliujianbo/article/details/122060781
今日推荐