通过父级捕获onTouch事件,处理它并传递给子级

Ela*_*d92 20 android click touch touch-event android-layout

我试图了解Android如何处理触摸事件并且有点困惑.根据我的理解,触摸事件被发送到根视图并传递给孩子们.我有一个FrameLayout容器Fragment.第一个片段视图是a ScrollView,第二个是某种Gallery(Horizo​​ntalListView),最后一个也是FrameLayout.每次布局中只有一个片段.我想要做的是识别屏幕上的用户滑动,以供应用程序使用.我想计算滑动并在经过一些滑动后做一些事情.

我试图把一个OnTouchListener放在顶部FrameLayout,但当孩子是ScrollView或那个时它不会被调用Gallery.我试图返回false,也在true最后onTouch,但我得到相同的结果 - 它永远不会被调用.

我该怎么做?我只是想"透明地"处理触摸事件并传递它们,就像我甚至没有触摸它们一样.

JRa*_*ond 26

我的理解是,它实际上是另一个方向.子视图首先触发事件(有点).dispatchTouchEvent()调用根视图得到它,它将事件传播到子onTouchEvent()节点,然后,根据它们是返回true还是false,onTouchEvent()调用父节点.

拦截这样的事情的正常解决方案是覆盖dispatchTouchEvent(MotionEvent ev)一个人的活动,如下所示:

@Override
public boolean dispatchTouchEvent (MotionEvent ev) {
  // Do your calcluations
  return super.dispatchTouchEvent(ev);
}
Run Code Online (Sandbox Code Playgroud)

这个的文档在这里.请注意,您也可以在任何方法中覆盖该方法ViewGroup(例如a FrameLayout等)