我试图在我的RecyclerView上捕获ACTION_UP和ACTION_CANCEL,但我希望其他所有事件都能被它的孩子抓住,但看起来抓住第一个事件的孩子是唯一一个捕捉到以下所有内容。这是拦截事件的代码。
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
boolean takeEventControl = false;
switch (e.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
takeEventControl = true;
break;
case MotionEvent.ACTION_MOVE:
// Some processing
takeEventControl = false;
break;
}
return takeEventControl;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
// Some code
}
这是我的子视图代码
@Override
public boolean onTouch(final View view, final MotionEvent event) {
switch (e.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
//Some processing
break;
case MotionEvent.ACTION_MOVE:
//Some processing
break;
}
return true;
}
我已经测试了它并发现如果我第一次触发onInterceptTouchEvent时返回true,则成功调用onTouchEvent,但是在我的代码中,当事件操作是ACTION_DOWN或ACTION_MOVE时,我需要调用子onTouch,以及onTouchEvent在ACTION_UP或ACTION_CANCEL,但最后一个从未被调用,我希望有人能解释我在这里发生了什么。
答案 0 :(得分:0)
要避免在ACTION_DOWN
之后触摸视图控件,请让所有视图在false
onTouch
中返回ACTION_DOWN
。然后,您可以返回true
以查找真正正在处理的其他触摸事件。
这背后的原因是,true
返回ACTION_DOWN
的第一个视图将是唯一一个在onTouch
或{{1}之后接收未来ACTION_UP
来电的视图收到了。