Размах MotionLayout без привязки к штатам? - PullRequest
0 голосов
/ 06 февраля 2019

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

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

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

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

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

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

Найдено здесь: https://mikescamell.com/motionlayoutquickie-ontouchup/

0 голосов
/ 19 марта 2019

Вы можете установить положение с помощью метода 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());
}
...