表单元格行为中的onInterceptTouchEvent

时间:2015-01-19 19:49:06

标签: android

我试图在我的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,但最后一个从未被调用,我希望有人能解释我在这里发生了什么。

1 个答案:

答案 0 :(得分:0)

要避免在ACTION_DOWN之后触摸视图控件,请让所有视图在false onTouch中返回ACTION_DOWN。然后,您可以返回true以查找真正正在处理的其他触摸事件。

这背后的原因是,true返回ACTION_DOWN的第一个视图将是唯一一个在onTouch或{{1}之后接收未来ACTION_UP来电的视图收到了。