Tôi đã bắt đầu với mã của HighFlyer thực sự đã thay đổi trường mScroller (đây là một khởi đầu tuyệt vời) nhưng không giúp kéo dài thời lượng của cuộn vì ViewPager chuyển rõ ràng thời lượng cho mScroller khi yêu cầu cuộn.
Việc mở rộng ViewPager không hoạt động vì không thể ghi đè phương thức quan trọng (SmoothScrollTo).
Tôi đã kết thúc việc sửa lỗi này bằng cách mở rộng Scroller với mã này:
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);
}
}
Và sử dụng nó như thế này:
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) {
}
Về cơ bản, tôi đã mã hóa thời lượng thành 5 giây và làm cho ViewPager của tôi sử dụng nó.
Hi vọng điêu nay co ich.