繁体   English   中英

如何使View.OnScrollChangeListener在适用于Android 23(棉花糖)及更低版本的ViewPagger上工作

[英]How to make View.OnScrollChangeListener works on ViewPagger for android version 23 (Marshmallow) and below

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

首先,创建您自己的侦听器,该侦听器将从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
            }
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM