Как заставить View.OnScrollChangeListener работать на ViewPagger для Android версии 23 (Зефир) и ниже

View.setOnScrollChangeListener добавлен в версию 23. Мы хотим, чтобы она работала и в следующей версии. Для этого мы можем настроить scrollTo() функция

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
            }
        });
Другие вопросы по тегам