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

时间:2014-05-08 14:29:38

标签: java android touch

我想拦截给定布局中的每个触摸事件。

然后我想记录事件,

并将事件传播到触摸区域中的任何可点击视图。

如果我只想使用触摸事件一次,我该怎么做?

我已阅读其他SOF帖子中使用此内容:

  

(a)覆盖顶部的onInterceptTouchEvent(MotionEvent ev)方法   级别容器视图或(b)您可以覆盖   Activity.onUserInteraction但它还包括键和轨迹球   操作

但是我不确定先发生了什么?在根布局中处理事件或启动其子项?

事件总是从较低层传播到较高层(父视图传递给它的子节点)?

2 个答案:

答案 0 :(得分:2)

您是否尝试覆盖Activity.dispatchTouchEvent(MotionEvent ev)

来自文档http://developer.android.com/reference/android/app/Activity.html#dispatchTouchEvent(android.view.MotionEvent)

Called to process touch screen events. You can override this to intercept all touch screen events before they are dispatched to the window. Be sure to call this implementation for touch screen events that should be handled normally.

答案 1 :(得分:1)

每个触摸事件都从父视图传播到它的孩子。

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