2012-03-13 21 views
2

我开发了扩展ViewGroup的自定义布局。现在,我想在一个活动中使用它。在我的活动中,我在布局布局中都有这个布局和一个viewpager。我的自定义布局填充我的框架布局,并在我的viewPager之上。将触摸事件调度到同级视图

我希望能够处理自定义布局上的点击事件,并让所有其他运动进入viewpager,以便它仍然可以滚动。

我还没有管理到目前为止。要么我点击了,但viewpager无法再滚动,或者相反。我已经覆盖onTouchEvent和onInterceptTouchEvent。

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

PS:我已经试过splitMotionEvent无济于事

回答

2

确保无论是onTouchEvent或您的自定义布局的dispatchTouchEventACTION_DOWN发生返回true,那么你的自定义布局将收到的ACTION_MOVEACTION_UP更高版本。

0

我遇到了同样的问题,我在使用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; 
    } 
}); 
相关问题