1

我正在开发一个应用程序,其中包含几个片段,如下图所示:

图片1

底视图是MainActivity,上面有几个片段 MainActivity,可能包含按钮。我想在顶部添加一个片段以收听OnTouchEvents(手势),但忽略onclick事件并将事件传递onclick给下面的片段。

以下是我的问题,

  1. 如何区分代码中onTouchEventonclick事件?
  2. 如何将onclick事件传递给下面的片段?
    我看到有人建议使用onInterceptTouchEvent(),但我不确定这是否适用于我的情况,我不太了解如何使用onInterceptTouchEvent()

更新:
我试图重写boolean dispatchTouchEvent(MotionEvent ev)以使顶部片段忽略点击事件,但是由于第一个触摸事件必须是MotionEvent.ACTION_DOWN,我似乎无法确定触摸事件是否为点击。

那么,还有其他方法可以做到这一点吗?

4

2 回答 2

0

将使您了解 onTouch 和 onClick 的不同之处。您可以使用自定义接口将数据传递给较低的片段进行操作

于 2016-10-05T16:39:20.050 回答
0

文档

每当在 ViewGroup 的表面(包括其子项的表面)上检测到触摸事件时,都会调用 onInterceptTouchEvent() 方法。如果 onInterceptTouchEvent() 返回 true,则 MotionEvent 被拦截,这意味着它不会被传递给 child,而是传递给 parent 的 onTouchEvent() 方法

onInterceptTouchEvent() 方法使父级有机会在其子级之前看到任何触摸事件。如果从 onInterceptTouchEvent() 返回 true,则之前处理触摸事件的子视图会收到一个 ACTION_CANCEL,并且从该点开始的事件将被发送到父视图的 onTouchEvent() 方法进行常规处理。onInterceptTouchEvent() 也可以返回 false 并在事件沿视图层次结构向下移动到通常的目标时简单地监视事件,这些目标将使用自己的 onTouchEvent() 处理事件。

因此,您必须根据您的应用程序流逻辑返回真/假(在 onInterceptTouchEvent 方法中)。如果您使用 OnTouchListener,您可以避免使用 OnClickListener。请参阅文档中的示例以更好地理解它。

于 2016-10-04T15:02:47.783 回答