Подтвердить что ты не робот

Как ограничить доступ к страницам ViewPager для одного за жест

Когда вы используете setPageMargin для установки отрицательного поля на ваш ViewPager, страницы станут меньше, чем полная ширина ViewPager. Побочным эффектом этого является то, что пользователь может использовать один длинный жест для изменения активной страницы более одного раза.

Есть ли способ предотвратить однократное изменение страницы несколько раз?

Я пытался остановить события движения от доступа к пейджеру, но вам нужно будет пропустить MotionEvent.ACTION_UP или пейджер работает неправильно. Up также запускает вычисления на основе скорости в ViewPager и вызывает дополнительную смену страницы при ее срабатывании.

Мне нужно reset скорость перетаскивания или мне нужно как-то предотвратить дополнительные изменения страницы.

Я использовал метод, описанный в этом вопросе, чтобы остановить прокрутку, но описанная проблема ACTION_UP не позволяет мне ее завершить. Можно ли отключить прокрутку на ViewPager

Любые идеи?

4b9b3361

Ответ 1

Я точно не знаю, чего вы пытаетесь достичь здесь, но вместо использования отрицательного поля не будет лучше для пользователя getPageWidth() на PagerAdapter, чтобы ширина страниц была меньше ширины ViewPager?

Изменить

Хорошо, я придумал "хакерское" решение, состоящее в копировании исходного кода из ViewPager в ваш проект и небольшом изменении функции executeDrag(), поэтому он не перетащит более одной страницы.

Этот хак работает с некоторыми предположениями:

  • Он использует getPageWidth() для определения относительного размера страниц
  • Все страницы должны возвращать те же значение getPageWidth()

Вы можете проверить образец проекта, а изменения ViewPager diff

Это не красивое или изящное решение, но оно работает, и я, наконец, закрою трехмесячный билет с этой же проблемой, поэтому менеджер счастлив:)