从 MotionEvent 中的不可滚动视图检测滚动
Detect Scroll from unScrollable View in MotionEvent
我正在使用一个滚动视图,它有一个滚动触发器,处于不可滚动状态,我想检测可能的滚动,但我不想滚动视图,而是想用这个值做其他事情。
@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);
}
此代码 return difY 为 0,如果情况 return 为真,则根本不会调用 ACTION_MOVE。
onInterceptTouchEvent
用于告诉 Android 框架您的视图对当前发生的触摸事件感兴趣,并希望继续接收有关它的更新,直到它结束。
要实际处理触摸,您应该重写 onTouchEvent
,这是将继续接收触摸的回调,直到它被取消或 ACTION_UP
。
一个 quick/dirty 解决方法是 return 始终 true
在 onInterceptTouchEvent
上并将您当前的代码移动到 onTouchEvent
。这种方式的优点是容易做到,缺点是它会阻止你所有的视图parentView
接收触摸事件。
正确的做法是 return只有在您的视图检测到 difY != 0
之后才 return 为真 onInterceptTouchEvent
,然后在 onTouchEvent
[=20] 期间继续处理触摸=]
我正在使用一个滚动视图,它有一个滚动触发器,处于不可滚动状态,我想检测可能的滚动,但我不想滚动视图,而是想用这个值做其他事情。
@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);
}
此代码 return difY 为 0,如果情况 return 为真,则根本不会调用 ACTION_MOVE。
onInterceptTouchEvent
用于告诉 Android 框架您的视图对当前发生的触摸事件感兴趣,并希望继续接收有关它的更新,直到它结束。
要实际处理触摸,您应该重写 onTouchEvent
,这是将继续接收触摸的回调,直到它被取消或 ACTION_UP
。
一个 quick/dirty 解决方法是 return 始终 true
在 onInterceptTouchEvent
上并将您当前的代码移动到 onTouchEvent
。这种方式的优点是容易做到,缺点是它会阻止你所有的视图parentView
接收触摸事件。
正确的做法是 return只有在您的视图检测到 difY != 0
之后才 return 为真 onInterceptTouchEvent
,然后在 onTouchEvent
[=20] 期间继续处理触摸=]