自动轮播的ViewPager 在自动切换的时候 如果两张图片是一样的,或者差别不大,看起来就会像是抖动一下,非常生硬。
ViewPager 的滑动内部也是通过 Scroller 来实现的
所以我们只需要替换调 viewpager 的Scroller 就好了
1.自定义一个可以设置滑动时间的 BannerScroller
public class BannerScroller extends Scroller {
private int mDuration = BannerConfig.DURATION;
public BannerScroller(Context context) {
super(context);
}
public BannerScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public BannerScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
public void setDuration(int time) {
mDuration = time;
}
原生的Scroller 默认时间是250
2.重置ViewPager 的 Scroller
private void initViewPagerScroll() {
try {
Field mField = ViewPager.class.getDeclaredField("mScroller");
mField.setAccessible(true);
mScroller = new BannerScroller(mViewPager.getContext());
mScroller.setDuration(scrollTime);
mField.set(mViewPager, mScroller);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
3.总结:
上述方法提供了一种更改原生控件行为的思路,不需要自定义也不会影响其他正常的ViewPager