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

Java 当有多个子视图时,如何检测父视图的滑动?,java,android,Java,Android,我有一个自定义日历布局,它由多个线性布局组成。当我将OnTouchListener设置为父视图时。它不起作用,因为它们充满了子视图。我不能将侦听器添加到每个子视图中,因为它需要设置很多。有什么办法可以解决这个问题吗 事实证明,拦截触控事件并不像我们所认为的那样简单和直接。要正确处理视图组中的触摸事件,您需要覆盖onInterceptTouchEvent()和onTouchEvent()(如果您不希望您的子视图也获得触摸事件) foronInterceptTouchEvent()以比指南更简洁的方

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

事实证明,拦截触控事件并不像我们所认为的那样简单和直接。要正确处理
视图组中的触摸事件
,您需要覆盖
onInterceptTouchEvent()
onTouchEvent()
(如果您不希望您的子视图也获得触摸事件)

for
onInterceptTouchEvent()
以比指南更简洁的方式解释这一点。下面是一个包含相关代码和描述的示例

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


您需要在自定义日历布局中覆盖onInterceptTouchEvent(),并在那里进行触摸处理。有关更多参考,请参阅

每当在
视图组
的表面(包括其子对象的表面)上检测到触摸事件时,就会调用
onInterceptTouchEvent()
方法。如果
onInterceptTouchEvent()
返回true,则会截取
MotionEvent
,这意味着它不会传递给子级,而是传递给父级的
onTouchEvent()
方法


对不起,迟了答复。我已经尝试过这个回调,当我记录它的运行方式时,它只能检测到up和down的up和down事件,每次尝试使用
requestDisallowTouchIntercept
检查您的任何子视图是否明确阻止触摸拦截时,它总是同时调用down-up。我想我可能已经找到了它不起作用的原因。我会更新我的答案。谢谢。我将尝试+1以获得良好的引用。很好,如果有效,请将答案标记为正确。干杯。:)