我正在使用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。
答案 0 :(得分:1)
onInterceptTouchEvent
用于告诉Android Framework您的View对当前正在发生的触摸事件感兴趣,并希望继续接收有关它的更新,直到它结束。
要实际处理触摸,您应该覆盖onTouchEvent
,这是在取消触摸或ACTION_UP
之前一直接受触摸的回调。
快速/肮脏的解决方法是始终在true
上返回onInterceptTouchEvent
并将当前代码移至onTouchEvent
。这种方式的好处在于它很容易做到,缺点是它会阻止你的所有视图parentView
接收触摸事件。
正确的方法是在视图检测到onInterceptTouchEvent
之后返回true difY != 0
,然后在onTouchEvent
期间继续处理