改变viewPager滑动的速度,利用反射完美实现

来源:互联网 发布:three.js入门指南 编辑:程序博客网 时间:2024/06/06 00:12

利用反射拿到

mScroller

public void setSliderTransformDuration(int duration,ViewPager pager) {    try {        Field mScroller = ViewPager.class.getDeclaredField("mScroller");        mScroller.setAccessible(true);        FixedSpeedScroller scroller = new FixedSpeedScroller(pager.getContext(), null, duration);        mScroller.set(pager, scroller);    } catch (Exception e) {        e.printStackTrace();    }}


public class FixedSpeedScroller extends Scroller {    private int mDuration = 1500;    public FixedSpeedScroller(Context context) {        super(context);    }    public FixedSpeedScroller(Context context, Interpolator interpolator) {        super(context, interpolator);    }    public FixedSpeedScroller(Context context, Interpolator interpolator, int duration) {        this(context, interpolator);        mDuration = duration;    }    @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);    }}