将触摸事件发送到兄弟视图

时间:2012-03-13 20:10:07

标签: android touch

我开发了一个扩展ViewGroup的自定义布局。现在,我想在活动中使用它。在我的活动中,我在framelayout中有这个布局和一个viewpager。我的自定义布局填充了我的Frame布局,位于我的viewPager上方。

我希望能够在我的自定义布局上处理点击事件,并让所有其他动作转到viewpager,这样它仍然可以滚动。

到目前为止我没有管理过。要么我有点击,但是viewpager不能再滚动,反之亦然。我已经覆盖了onTouchEvent和onInterceptTouchEvent。

我注意到的是,我正确地在我的自定义布局上收到了down事件,但是一旦它被viewpager捕获,我就永远不会到达那里。如何在触摸事件的兄弟视图之间进行通信?

PS:我尝试过splitMotionEvent无济于事

2 个答案:

答案 0 :(得分:3)

确保自定义布局的onTouchEventdispatchTouchEventACTION_DOWN发生时返回true,然后您的自定义布局会收到ACTION_MOVE和{{ 1}}稍后。

答案 1 :(得分:1)

我在跟踪点按并使用OnTouchClickListener进行滑动时遇到了同样的问题。

我通过将触摸发送到父级和视图本身来解决它,以忽略即将发生的事件(以便调用其兄弟的触摸/点击)。如果不要忽略该事件,请使用它。

代码如下所示:

touchTrackingView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // do not consume this event so the sibling gets the touch/click
        if (mIgnoreNextTouchEvent) {
            mIgnoreNextTouchEvent = false;
            return false;
        }
        // TODO do what you need to do with the touch

        // next touch should be ignored so that
        // the sibling gets their touch/click invoked  
        mIgnoreNextTouchEvent = true;
        ((View) v.getParent()).dispatchTouchEvent(event);
        return true;
    }
});