Как отменить анимацию привязки ViewPager после вызова endFakeDrag()?

Контекст: я попытался реализовать flingable VelocityViewPager. Подбрасывающее движение работает правильно. Мне нравится, что страница «привязывается» к центру после броска. Несмотря на это, у меня было несколько проблем с ним до сих пор. Одна проблема заключается в том, что страница не привязывается к центру, когда вы перетаскиваете ее на определенное расстояние. Я решил эту проблему, используя этот код, так что это просто для контекста. Еще одна проблема ниже...


Проблема: после beginFakeDrag() -> FlingRunnable (бросающее движение) -> endFakeDrag() внутренний код endFakeDrag() "привязывает" страницу к центру. Когда я снова пытаюсь бросить во время резкого движения, он ждет, пока после анимации не завершится — ставя бросковое движение в очередь.

Как я могу отменить резкое движение при касании, чтобы оно не задерживало движение броска?


Попытка 1: при касании я попытался начать FakeDrag(), но это не отменяет моментальное движение endFakeDrag().

Попытка 2: вместо вызова endFakeDrag() я попытался имитировать резкое движение во время фальшивого перетаскивания, чтобы я мог реализовать отмену самостоятельно и вызывать endFakeDrag() только тогда, когда страница уже центрирована. Я попробовал это через SnapRunnable, используя startScroll() Scroller.

Это может быть мой лучший вариант, но я не могу понять, на какое расстояние X нужно прокручивать, чтобы центрировать страницу. Я попытался заглянуть в исходный ViewPager.class, но алгоритмы сбили меня с толку, и, похоже, он зависит от более внутреннего кода, к которому VelocityViewPager.class не может получить доступ.


person Serpentos    schedule 26.09.2016    source источник