我开发了一个扩展ViewGroup的自定义布局。现在,我想在活动中使用它。在我的活动中,我在framelayout中有这个布局和一个viewpager。我的自定义布局填充了我的Frame布局,位于我的viewPager上方。
我希望能够在我的自定义布局上处理点击事件,并让所有其他动作转到viewpager,这样它仍然可以滚动。
到目前为止我没有管理过。要么我有点击,但是viewpager不能再滚动,反之亦然。我已经覆盖了onTouchEvent和onInterceptTouchEvent。
我注意到的是,我正确地在我的自定义布局上收到了down事件,但是一旦它被viewpager捕获,我就永远不会到达那里。如何在触摸事件的兄弟视图之间进行通信?
PS:我尝试过splitMotionEvent无济于事
答案 0 :(得分:3)
确保自定义布局的onTouchEvent
或dispatchTouchEvent
在ACTION_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;
}
});