如果我在 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如果已按下屏幕则不会触发