21

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

我试图把 aOnTouchListener放在顶部,但是当孩子是或FrameLayout时它不会被调用。我试图返回并最终返回,但我得到了相同的结果 - 它永远不会被调用。ScrollViewGalleryfalsetrueonTouch

我该怎么做?我只想“透明地”处理触摸事件并将它们传递给我,就像我什至没有触摸它们一样。

4

1 回答 1

28

我的理解是,它实际上走向了另一个方向。子视图首先触发他们的事件(有点)。根视图 getdispatchTouchEvent()被调用,它将事件向下传播到子视图onTouchEvent(),然后根据它们返回 true 或 false,onTouchEvent()调用父视图。

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

@Override
public boolean dispatchTouchEvent (MotionEvent ev) {
  // Do your calcluations
  return super.dispatchTouchEvent(ev);
}

这个文档在这里。请注意,您还可以在任何ViewGroup(例如 aFrameLayout等)中覆盖该方法

于 2012-08-28T22:36:40.373 回答