나는 실제로 mScroller 필드를 변경 한 HighFlyer의 코드로 시작했지만 (훌륭한 시작) 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에서 사용하도록했습니다.
도움이 되었기를 바랍니다.