我正在开发一个使用许多页面进行滑动的应用程序,但是在某些页面上,我希望能够防止滚动到下一页,直到他们选择了某些内容。
目前我已经扩展了 ViewPager:
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager#onInterceptTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.canGoLeft || this.canGoRight) {
return super.onInterceptTouchEvent(event);
}
return false;
}
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
boolean lockScroll = false;
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = ev.getX();
lockScroll = false;
return super.onTouchEvent(ev);
case MotionEvent.ACTION_MOVE:
if (canGoLeft && lastX < ev.getX()) {
lockScroll = false;
} else if (canGoRight && lastX > ev.getX()) {
lockScroll = false;
} else {
lockScroll = true;
}
lastX = ev.getX();
break;
}
lastX = ev.getX();
if (lockScroll) {
//make callback to prevent movement
if (mOnPreventCallback != null) {
mOnPreventCallback.onPreventMovement();
}
return false;
} else {
return super.onTouchEvent(ev);
}
}
注意:我已经尝试实现防止滑动到上一页,但是您仍然可以滑动到上一页,但是您需要从最左侧滑动并向右滑动一点。它是喜怒无常的,但它并不能完全阻止滑动。
我想在这里做三件事:
- 防止滚动到下一个屏幕,直到他们选择了一个项目或其他东西
- 防止滚动到上一个屏幕(部分实现)
- 向用户提供反馈以显示滚动已禁用,就像 Android 以渐变方式显示顶部和底部屏幕的方式一样。