2020-03-26 Viewpager+fragment无限循环、设置Viewpage滑动速度r

1、viewPager的适配器 getCount() 方法返回Integer.max; getItem() 方法 返回 list.get(position%list.size());


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.

}

}

推荐阅读更多精彩内容