Gerçekten mScroller alanını değiştiren (bu harika bir başlangıç) HighFlyer'in koduyla başladım, ancak kaydırma süresini uzatmaya yardımcı olmadı çünkü ViewPager, kaydırma isteğinde bulunurken süreyi mScroller'a açıkça aktarıyor.
ViewPager'ı genişletmek, önemli yöntem (smoothScrollTo) geçersiz kılınamadığından işe yaramadı.
Scroller'ı şu kodla genişleterek bunu düzelttim:
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);
}
}
Ve bunu şu şekilde kullanarak:
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) {
}
Temelde süreyi 5 saniyeye kodladım ve ViewPager'ımın bunu kullanmasını sağladım.
Bu yardımcı olur umarım.