View.setOnScrollChangeListener
在版本 23 中添加。我们希望它也适用于以下版本。为此,我们可以自定义scrollTo()
函数
问问题
1110 次
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 回答