MotionLayout 多状态转换不流畅

MotionLayout multi state transition is not smooth

我有三种状态A,B,C.

OnSwipe 我从 AB 然后用另一个 OnSwipeBC.

滑动方向相同。因此,从状态 A 连续拖动最终应该会进入状态 C.

我面临的问题是过渡不顺利。在第一个转换结束时有一个停止。有时当我快速拖动时它会顺利运行(?)。但一般情况下,两次转换中间会有卡顿。

有什么方法可以摆脱这种冻结吗?

作为参考,我只是在测试 Google 团队给出的 samples。下面给出两个转换

    <Transition
        motion:constraintSetStart="@id/base_state"
        motion:constraintSetEnd="@id/half_people"
        motion:duration="3000">
        <OnSwipe
            motion:dragDirection="dragRight"
            motion:touchAnchorId="@id/people_pad"
            motion:touchAnchorSide="right" />
    </Transition>

    <Transition
        motion:constraintSetStart="@id/half_people"
        motion:constraintSetEnd="@id/people"
        motion:duration="3000">
        <OnSwipe
            motion:dragDirection="dragRight"
            motion:touchAnchorId="@id/people_pad"
            motion:touchAnchorSide="right" />
    </Transition>

简短回答否,但您可以尝试调整动作:在 onswipe 中拖动阈值

长答案 在 B 处,它评估存在另一个可以加载该转换的转换。

  1. 切换转换的计算量很大。
  • 约束集需要通过约束布局进行评估。
  • 需要构建所有移动对象的单调样条。
  1. 有延迟以确保拖动方向相同。

从长远来看,我们希望构建一个链接转换的 TransitionSet。 所以没有逻辑中断。 从中期来看,我们正在考虑向 Transitions 添加“点击停止”。因此,您构建了一个过渡,它会到达那个停止点。