如果我在 OnTouchListener 中返回 false,实际会发生啥?

Posted

技术标签:

【中文标题】如果我在 OnTouchListener 中返回 false,实际会发生啥?【英文标题】:What actually happens if I return false in a OnTouchListener?如果我在 OnTouchListener 中返回 false,实际会发生什么? 【发布时间】:2014-03-01 22:57:15 【问题描述】:

我正在创建一个需要SurfaceView 来实现OnTouchListener 的游戏。在游戏中我想暂停监听器一段时间。我尝试从onTouch()方法返回false,但该方法仍在执行。有没有其他方法可以让监听器暂停一段时间?谁能解释一下从onTouch() 返回 false 的真正含义?

【问题讨论】:

【参考方案1】:

来自View documentation:

Returns
True if the listener has consumed the event, false otherwise.

如果您返回 true,您会告诉 android 媒体已处理完毕。忘了它。

如果您返回false,您基本上会说“不是我的问题,其他人将不得不处理此点击”。然后 android 会将事件传递给其他视图,这些视图可能在您的视图之下。

【讨论】:

【参考方案2】:

如果返回 true,则向系统发出信号,表明您已使用该事件,如 documentation 所示。这意味着其他也有 touchlistener 的视图不会得到这个事件来处理。如果您返回 false,则事件将传递给父视图进行处理。

例如,如果您有一个嵌套在 Viewpager 内的 ListView,则 Listview 是第一个可以处理 touchevent 的视图。如果是水平滑动,则不会通过 listview 处理事件,而 viewpager 将能够处理滑动。

【讨论】:

【参考方案3】:

您必须注销您的实现。您可以提供null 作为参数。当您的暂停模式结束时再次设置它。如果你return true,触摸事件将不会传递给其他可能的视图。

【讨论】:

以上是关于如果我在 OnTouchListener 中返回 false,实际会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

OnTouchListener 在 Android 的 BaseAdapter 中被频繁调用

Android - OnTouchListener如果已按下屏幕则不会触发

右滑返回功能 几种实现方式总结

无论如何要从视图对象中删除 onTouchListener 吗?

OnTouchListener 防止视觉反馈

带有 ViewFlipper 的 onTouchListener 不能立即工作