ViewPager.setCurrentItem(position),即使已設置動畫,但是沒有動畫效果
原因:因為ViewPager滑動之前的時間間隔太短,可以通過反射,去修改ViewPager自動滑動時間, 這樣修改不會影響手動滑動時間
通過反射重新為ViewPager設置Scroller
private void setViewPagerScroller() {
try {
Field scrollerField = ViewPager.class.getDeclaredField("mScroller");
scrollerField.setAccessible(true);
Field interpolator = ViewPager.class.getDeclaredField("sInterpolator");
interpolator.setAccessible(true);
Scroller scroller = new Scroller(this, (Interpolator) interpolator.get(null)) {
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, duration * 7); // 這里是關鍵,將duration變長或變短
}
};
scrollerField.set(viewPager, scroller);
} catch (NoSuchFieldException e) {
// Do nothing.
} catch (IllegalAccessException e) {
// Do nothing.
}
}
