我开发了一个扩展ViewGroup的自定义布局。现在,我想在活动中使用它。在我的活动中,我在框架布局中同时拥有此布局和一个视图寻呼机。我的自定义布局填充了我的框架布局,并且位于我的viewPager上方。
我希望能够在我的自定义布局上处理点击事件,并让所有其他动作进入视图寻呼机,这样它仍然可以滚动。
到目前为止我还没有成功。要么我点击了,但寻呼机不能再滚动了,要么相反。我已经覆盖了onTouchEvent和onInterceptTouchEvent。
我注意到的是,我在自定义布局上正确地接收到down事件,但一旦它被viewpager捕获,我就永远不会到达那里。如何在触摸事件的兄弟姐妹视图之间进行通信?
PS:我尝试过splitMotionEvent,但没有成功
确保自定义布局的onTouchEvent
或dispatchTouchEvent
在ACTION_DOWN
发生时返回true,然后您的自定义布局稍后将收到ACTION_MOVE
和ACTION_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;
}
});