如何拦截整个安卓屏幕上的每一个触摸事件?

3
我想拦截给定布局中的每个触摸事件。然后,我想记录该事件并将其传播到触摸区域内的任何可点击视图。如果我只想消耗触摸事件一次,我该怎么做?我已经阅读了其他SO论坛帖子,建议使用以下内容:(a)在顶级容器视图中覆盖onInterceptTouchEvent(MotionEvent ev)方法或(b)覆盖Activity.onUserInteraction但它还包括键和轨迹球操作。但我不确定什么会先发生?根布局处理事件还是从其子项开始处理?事件是否总是从较低层向上传播(父视图到其子项)?
2个回答

3

1
根据我的经验,这适用于活动,但如果您打开对话框,则不会起作用。 - draksia
@draksia是的,它对于对话框不起作用,因为它们本身就是一个窗口,但是对话框可以重写dispatchTouchEvent方法。 - triggs

0

每个触摸事件都会从父视图传递到其子视图。

首先,触摸事件传递到根视图。如果它的onInterceptTouchEvent返回true,则此事件将传递给根视图的onTouchEvent。如果onTouchEvent返回false,则此事件将传递给根视图的父级,如果返回true,则此触摸事件将消失。如果onInterceptTouchEvent返回false,则此触摸事件将传递给根视图的子视图。递归进行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接