Размах 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());
}