Я почав з коду HighFlyer, який дійсно змінив поле mScroller (це чудовий початок), але не допомогло продовжити тривалість прокрутки, оскільки ViewPager явно передає тривалість mScroller при запиті прокрутки.
Розширення ViewPager не спрацювало, оскільки важливий метод (smoothScrollTo) неможливо змінити.
Я закінчив це виправити, розширивши Scroller із цим кодом:
public class FixedSpeedScroller extends Scroller {
private int mDuration = 5000;
public FixedSpeedScroller(Context context) {
super(context);
}
public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
}
І використовуючи це так:
try {
Field mScroller;
mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
FixedSpeedScroller scroller = new FixedSpeedScroller(mPager.getContext(), sInterpolator);
// scroller.setFixedDuration(5000);
mScroller.set(mPager, scroller);
} catch (NoSuchFieldException e) {
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
Я в основному жорстко кодував тривалість до 5 секунд і змусив мій ViewPager використовувати його.
Сподіваюся, це допомагає.