0

onTouchEvent我了解 Views 可以通过在传递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. 我猜是因为它没有找到合适的孩子来转发意见。

4

1 回答 1

0

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

于 2016-06-07T21:10:19.753 回答