竞争onTouchEvent处理程序?

时间:2016-04-27 22:28:48

标签: android android-view android-touch-event

我理解视图可以通过在传递onTouchEvent事件时在ACTION_DOWN中返回true来决定自己处理MotionEvent。如果他们返回true,那么他们将收到所有后续MOVE/UP/CANCEL个事件。这工作正常。

我想做的是将此决定推迟到ACTION_MOVE事件。我有一个包含子项的ViewGroup,并且根据是否水平或垂直滚动​​,我希望ViewGroup或Child负责处理MotionEvents

类似的东西:

public class MyViewGroup extends ViewGroup{
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getActionMasked();
        if (action == MotionEvent.ACTION_DOWN) {
            mDownX = event.getX();
        } else if (action == MotionEvent.ACTION_MOVE) {
            if (Math.abs(event.getX() - mDownX) > THRESHOLD_X) {
                // I want all the future events to be forwarded to this ViewGroup
                return true;
            }
        }
        return false;
    }
}

public class MyChild extend View {
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getActionMasked();
        if (action == MotionEvent.ACTION_DOWN) {
            mDownY = event.getY();
        } else if (action == MotionEvent.ACTION_MOVE) {
            if (Math.abs(event.getY() - mDownY) > THRESHOLD_Y) {
                // I want all the future events to be forwarded to this View
                return true;
            }
        }
        return false;
    }
}

这可能吗?现在,只有ViewGroup才会收到MOVE/UP/CANCEL。我猜是因为它没有找到合适的孩子来转发视图。

1 个答案:

答案 0 :(得分:0)

为了记录,我最终通过覆盖ViewGroup.dispatchTouchEvent()来做到这一点。这有点麻烦,但可行。如果需要,我可以分享代码。