Размах MotionLayout без привязки к штатам?

Я заметил, что все MotionLayouts до сих пор всегда привязываются к одному из своих конечных состояний, даже если вы перетаскиваете вид на половину анимации, останавливаетесь и отпускаете. То, чего я пытаюсь добиться, - это чтобы motionlayout действовал только на взаимодействие с пользователем и импульс. Если пользователь отпускает в середине анимации, он должен полностью остановиться, как только истечет импульс, и не продолжать интерполяцию до явно определенного состояния, которое является поведением по умолчанию.

Списки, прокрутки, списки координаторов поддерживают эту "промежуточную" остановку, так почему бы не замедлить движение?

Так кто-нибудь знает, как заморозить ход движения между государствами? Он должен работать для любой позиции на временной шкале, поэтому я не хочу добавлять дополнительные состояния, так как для этого потребуется 100 из них.

0 ответов

Добавить onTouchUp на ваш OnSwipe. stop это, вероятно, то, что вы хотите. decelerateвроде глючит. И в любом случае остановка - это скорее замедление, если она подключена к просмотру с прокруткой, поскольку представление будет обеспечивать собственное замедление.

    <OnSwipe
        app:dragDirection="dragUp"
        app:onTouchUp="stop"
        app:touchAnchorId="@id/scrollView"
        app:touchAnchorSide="top" />

Нашел здесь: https://mikescamell.com/motionlayoutquickie-ontouchup/

Вы можете установить позицию с motionLayout.setProgress() метод, и сделайте это или когда переход меняется или когда вы отпустите палец на MotionEvent.ACTION_UP в методе OnTouch.

Первый вариант:

motionLayout.setTransitionListener(new MotionLayout.TransitionListener() {

        // Other methods

        @Override
        public void onTransitionChange(MotionLayout motionLayout, int i, int i1, float v) {
            // v == motionLayout.getProgress();
            motionLayout.setProgress(v);
        }

        // Other methods
    });

Второй вариант:

if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
    motionLayout.setProgress(motionLayout.getProgress());
}
Другие вопросы по тегам