将触摸事件分派到同级视图



我开发了一个扩展ViewGroup的自定义布局。现在,我想在活动中使用它。在我的活动中,我在框架布局中同时拥有此布局和一个视图寻呼机。我的自定义布局填充了我的框架布局,并且位于我的viewPager上方。

我希望能够在我的自定义布局上处理点击事件,并让所有其他动作进入视图寻呼机,这样它仍然可以滚动。

到目前为止我还没有成功。要么我点击了,但寻呼机不能再滚动了,要么相反。我已经覆盖了onTouchEvent和onInterceptTouchEvent。

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

PS:我尝试过splitMotionEvent,但没有成功

确保自定义布局的onTouchEventdispatchTouchEventACTION_DOWN发生时返回true,然后您的自定义布局稍后将收到ACTION_MOVEACTION_UP

我在使用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;
    }
});

最新更新