Android动画新势力——MotionLayout( 三 )


Android动画新势力——MotionLayout文章插图

该元素用于指定当用户在不居中滑动时需要执行的操作 。 动画序列的速度和目标视图的动画 , 受滑动的速度和方向影响 , 滑动的速度和方向是通过可选参数配置来控制的 。
属性
  1. motion:touchAnchorId:滑动时需要移动的视图 ID 。
  2. motion:touchAnchorSide:滑动所关联到的目标视图的锚点边 , MotionLayout 会尝试在该锚点与用户手指之间保持恒定的距离 。 (可取值有: left、right、top 和 bottom) 。
  3. motion:dragDirection:用户滑动的方向 , 如果设定了该值 , 这个 将仅支持向特定的方向滑动(可取值有:dragLeft、dragRight、dragUp 和 dragDown)
  4. motion:dragScale:控制目标视图的滑动距离和用户手指滑动距离的相对比例 , 默认值是1 。 取值小于1时目标视图的移动速度小于手指滑动速度 , 取值大于1时目标视图的移动速度大于手指的滑动速度 。
  5. motion:maxVelocity:目标视图的最大速度 。
  6. motion:maxAcceleration:目标视图的最大加速度 。
  7. motion:onTouchUp:触摸收起时的动作 , 可选值有:stop(停止动画)、autoComplete(自动完成动画)、autoCompleteToEnd(自动完成到结束状态)、autoCompleteToStart(自动完成到开始状态)、decelerate(减速停止动画)、decelerateAndComplete(减速并完成动画)
前面提到 , 动画的声明是有 “开始状态” 和 “结束状态” 两个点 , 目标控件在这两个点之间移动 , 前面的例子都是直线的动画 , 显然这个实际使用中需要更复杂的动画 。 就是提供声明更加复杂动画的元素 , 他声明了动画运动轨迹的关键点集合 , 它可包含 , 通过这些元素 , 可以在动画的 “开始状态” 和 “结束状态” 添加 “中间点” , 动画将平滑地移动到每个中间点 , 完成更复杂的动画 。
该元素用于指定视图在运动过程中 , 在特定的时刻的位置 。 换句话说就是运动轨迹上的关键点的位置 。 在一个 中可以添加多个 用来添加多个不同的关键点位置 。
属性
  1. motion:motionTarget:当前关键点位置控制的目标视图的 ID 。
  2. motion:framePosition:关键帧位置 , 用百分比表示 , 取值为 0~100 之间的整数 。 (例如:取值20 , 表示该关键帧在运动轨迹的 20% 位置处 ) , 这个点将运动时间一分为二 , 两边的时间是相等的 , 如果运动轨迹长度不一样 , 那么将会造成运动速度不一样 。 但需要注意的是 , 关键帧的位置并不是关键点的位置 。
  3. motion:keyPositionType:关键点的类型 , 不同的类型会对 motion:percentX 和 motion:percentY 的值做出不一样的解析 。 取值有 parentRelative 、 deltaRelative 和pathRelative 。
  4. motion:percentX:X 轴方向的属性取值百分比 , 取值范围为0.0~1.0 。
  5. motion:percentY:Y 轴方向的属性取值百分比 , 取值范围为0.0~1.0 。


    推荐阅读