Android动画新势力——MotionLayout


Android动画新势力——MotionLayout文章插图
背景MotionLayout的设计是为了连接布局过渡与复杂的手势处理 。 你可以把它想象成属性动画框架、过渡动画管理和CoordinatorLayout三种能力集于一身的框架 。
它可以能够描述两个布局之间的过渡( 就像TransitionManager的功能一样) , 但是它又和TransitionManager不一样的地方在于 , 在转换的过程中 , 任何属性都能以动画的形式过渡(不仅仅是已有的属性 , 自定义属性也可以) 。 更屌的是 , 它本身就支持可见的转换,就像CoordinatorLayout一样(这种转换完全由触摸驱动 , 并且立即转换到任意点) 。 它支持触摸处理和关键帧(keyFrames),允许开发者非常容易的定制元素之间的过渡 。
MotionLayout另一个不同点就是完全是声明式的 , 你完全可以用xml写一个复杂的转换(如果想用代码 , 当时也是非常可以的)
MotionLayout非常有特色的将所有的信息保存在了一个独立的XML文件中 , 保存在XML文件中的信息优先级将会比layout文件中要高 。
MotionLayout的限制MotionLayout只能对其直属的子View提供各种变换功能 , 这一点相对于可以作用布局层级和Activity之间转换的TransitionManager来说 , 的确是一个劣势 。
MotionLayout官方使用场景

  1. 平移、缩放、旋转

Android动画新势力——MotionLayout文章插图
  1. 属性动画(支持自定义属性)

Android动画新势力——MotionLayout文章插图
BackgroundColor属性变化
  1. 自定义路径动画

Android动画新势力——MotionLayout文章插图
  1. 配合CoordinatorLayout动画

Android动画新势力——MotionLayout文章插图
  1. 配合DrawLayout

Android动画新势力——MotionLayout文章插图
MotionLayout属性
  • layoutDescription:动画布局xml引用
  • applyMotionScene:布尔类型 , 表示是否应用 MotionScene , 默认值为 true 。
  • showPaths:布尔类型 , 表示在运动进行时是否显示运动路径 。 默认值为 false
  • progress:float类型 , 可以明确指定转换进度(取值0.0~1.0)
  • currentState:reference类型 , 可指定具体的 ConstraintSet
  • motionDebug:可显示与运动有关的其他调试信息 。 可取值有:SHOW_PROGRESS、SHOW_PATH或SHOW_ALL 。
运动描述文件详解【Android动画新势力——MotionLayout】描述文件组成元素
:描述文件的根节点元素 。
:声明所有的视图控件在运动过程中 , 特定关键点的位置和属性 。
:声明单个视图控件在运动过程中 , 特定关键点的位置和属性 。
:声明运动过程中的开始和结束状态 , 包括所有预期的过度状态、用户的触发的交互等 。
:声明当用户触摸特定的视图控件时所要执行的动作 。
:声明当用户在布局中滑动时所要执行的动作 。
:声明在运动过程中视图控件的位置和属性 。
:声明在运动过程中特定时刻视图控件的位置 。
:声明在运动过程中特定时刻视图控件的属性 。