有多个孩子时如何检测父视图的滑动?

时间:2019-07-13 04:56:50

标签: java android

我有一个自定义日历布局,该布局由多个线性布局组成。当我将OnTouchListener设置为父视图时。它不起作用,因为它们充满了子视图。而且我无法将侦听器添加到每个子视图中,因为要进行很多设置。有什么解决方案可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

事实证明,拦截触摸事件并不像guide那样让我们相信。为了正确处理ViewGroup中的触摸事件,您需要同时覆盖onInterceptTouchEvent()onTouchEvent()(如果您不希望子视图也获得触摸事件)。

onInterceptTouchEvent()的{​​{3}}的解释比指南中的解释更简洁。这是一个reference docs,其中包含相关代码以及说明。

TL; DR -在onInterceptTouchEvent()中拦截触摸事件并返回true后,以下触摸事件将发送到父视图组的onTouchEvent()。如果您在onInterceptTouchEvent()中返回false,则会将以下触摸事件发送到子视图的onTouchEvent(),您可以在onInterceptTouchEvent()继续截取它们。


您需要在自定义日历布局中覆盖onInterceptTouchEvent()并在此处进行触摸处理。请参阅article以获取更多参考。

  

只要在onInterceptTouchEvent()的表面(包括其子表面)上检测到触摸事件,就会调用ViewGroup方法。如果onInterceptTouchEvent()返回true,则会拦截MotionEvent,这意味着它不会传递给子级,而是传递给父级的onTouchEvent()方法。