Есть ли способ настроить порог для прокрутки ViewPager?

Я не могу найти способ изменить порог касания для прокрутки страниц в ViewPager: http://developer.android.com/reference/android/support/v4/view/ViewPager.html

Рассматривая исходный код , ViewPager имеет метод под названием defineTargetPage, который проверяет, не изменяется ли диапазон касаний жестом касания до порога, но похоже, что нет возможности изменить этот диапазон.

Любые предложения о том, как я могу контролировать этот порог (если вообще возможно)?

Solutions Collecting From Web of "Есть ли способ настроить порог для прокрутки ViewPager?"

Выключитесь здесь немного. Я не сомневаюсь, что вам, возможно, придется подкорректировать эту концепцию и / или код.

Я порекомендую то, что я сделал в комментариях выше; Расширить ViewPager и переопределить его публичные конструкторы и вызвать настраиваемый метод, который является клоном initViewPager() (см. Источник, который вы initViewPager() ). Однако, как вы отметили, mFlingDistance , mMinimumVelocity и mMinimumVelocity являются private полями, поэтому к ним нельзя получить доступ подклассом.

(Примечание. Вы также можете изменить эти методы после вызова конструкторов, если хотите.)

Вот где это становится немного сложно. В Android мы можем использовать API Java Reflection, чтобы сделать эти поля доступными.

Он должен работать примерно так:

 Class clss = getClass.getSuperClass(); Field flingField = clss.getDeclaredField("mFlingDistance"); // Of course create other variables for the other two fields flingField.setAccessible(true); flingField.setInt(this, <whatever int value you want>); // "this" must be the reference to the subclass object 

Затем повторите это для двух других переменных с любыми значениями, которые вы хотите. Вы можете посмотреть, как они рассчитываются в источнике.

К сожалению, насколько я хотел бы рекомендовать использование Reflection для переопределения private метода determineTargetPage() , я не считаю, что это возможно сделать – даже с экспансивным API Reflection.