Переход между несколькими состояниями MotionLayout не является плавным

#android-constraintlayout #android-transitions #android-motionlayout

#android-constraintlayout #android-переходы #android-описание движения

Вопрос:

У меня есть три состояния A, B, C.

С OnSwipe помощью I я перехожу от A к B, а затем с другим OnSwipe от B к C.

Направления прокрутки одинаковы. Таким образом, непрерывное перетаскивание из состояния A должно в конечном итоге перейти в состояние C.

введите описание изображения здесь

Проблема, с которой я сталкиваюсь, заключается в том, что переход не является плавным. В конце первого перехода происходит остановка. Иногда это работает плавно, когда я быстро перетаскиваю (?). Но, как правило, в середине двух переходов происходит остановка.

Есть ли какой-нибудь способ избавиться от этого зависания?

Для справки я просто тестирую образцы, предоставленные командой Google. Приведены два перехода, как показано ниже

     <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>
 

Ответ №1:

Короткий ответ нет, но вы можете попробовать настроить motion: dragThreshold в onswipe.

Длинный ответ в точке B он оценивает, что существует другой переход, который может загрузить этот переход.

  1. Переключение переходов требует больших вычислительных затрат.
  • Наборы ограничений должны оцениваться с помощью компоновки ограничений.
  • Необходимо построить монотонные сплайны для всех движущихся объектов.
  1. Существует задержка, чтобы гарантировать, что перетаскивание происходит в том же направлении.

В долгосрочной перспективе мы надеемся создать набор переходов, который свяжет переходы в цепочку. Так что никакого логического разрыва нет. В среднесрочной перспективе мы рассматриваем возможность добавления «остановок нажатия» к переходам. Таким образом, вы строите из одного перехода, и он движется к этой остановке.