我使用的是一个具有滚动触发器的ScrollView,在不可滚动状态下,我希望检测到可能的滚动,但是我不想滚动视图,而是使用这个值做其他事情。
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (!mScrollable) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
y = event.getY();
case MotionEvent.ACTION_UP:
y = event.getY();
case MotionEvent.ACTION_MOVE:
double newY = event.getY();
double difY = y - newY;
mCallbacks.onScrollChanged((int) difY, false, false);
y = newY;
}
return false;
} else return super.onInterceptTouchEvent(event);
}如果情况返回为true,则此代码将difY作为0返回,而根本不调用ACTION_MOVE。
发布于 2015-01-19 13:25:21
onInterceptTouchEvent用于告诉Android,您的视图对当前正在发生的触摸事件感兴趣,并且希望不断收到有关它的更新,直到它结束为止。
要实际处理触摸,您应该重写onTouchEvent,这是一个回调,它将一直接收触摸,直到它被取消或ACTION_UP为止。
一个快速/肮脏的解决方法是返回true on onInterceptTouchEvent并将当前代码移动到onTouchEvent。这样做的好处是很容易做到,缺点是它会阻止您的所有视图parentView接收触摸事件。
正确的方法是,只有在视图检测到onInterceptTouchEvent并在onTouchEvent期间继续处理触摸之后,才返回真正的difY != 0。
https://stackoverflow.com/questions/28025571
复制相似问题