0

View.setOnScrollChangeListener在版本 23 中添加。我们希望它也适用于以下版本。为此,我们可以自定义scrollTo()函数

4

1 回答 1

1

首先,创建您自己的侦听器,该侦听器完全从View.OnScrollChangeListener 获取

public interface CustomOnScrollChangeListener {
    /**
     * Called when the scroll position of a view changes.
     *
     * @param v The view whose scroll position has changed.
     * @param scrollX Current horizontal scroll origin.
     * @param scrollY Current vertical scroll origin.
     * @param oldScrollX Previous horizontal scroll origin.
     * @param oldScrollY Previous vertical scroll origin.
     */
    void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY);
}

然后你可以创建一个自定义ViewPager

public class CustomPager extends ViewPager {
    private int mScrollingX, mScrollingY;
    private CustomOnScrollChangeListener mListener;

    public CustomPager(Context context) {
        super(context);
    }

    public CustomPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setCustomScrollChangeListener(CustomOnScrollChangeListener listener) {
        mListener = listener;
    }

    @Override
    public void scrollTo(@Px int x, @Px int y) {
        super.scrollTo(x, y);
        if (mScrollingX != x || mScrollingY != y) {
            int oldX = mScrollingX;
            int oldY = mScrollingY;
            mScrollingX = x;
            mScrollingY = y;
            invalidate();
            mListener.onScrollChange(this, mScrollingX, mScrollingY, oldX, oldY);
            if (!awakenScrollBars()) {
                postInvalidateOnAnimation();
            }
        }
    }
}

现在您可以开始使用它了。

  mViewPager.setCustomScrollChangeListener(new CustomOnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX,
                    int oldScrollY) {
              //Put your logic code here
            }
        });
于 2017-08-01T02:24:23.683 回答