【问题标题】:how to intercept every touch event on whole android screen?如何拦截整个android屏幕上的每个触摸事件?
【发布时间】:2014-05-08 14:29:38
【问题描述】:

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

然后我想记录事件,

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

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

我已阅读其他 SOF 帖子以使用此功能:

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

但是我不确定首先会发生什么?在根布局中处理的事件还是启动其子级?

事件是否总是从下层传播到上层(父视图到其子视图)?

【问题讨论】:

    标签: java android touch


    【解决方案1】:

    您是否尝试过覆盖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.

    【讨论】:

    • 根据我的经验,这适用于活动,但如果你打开一个对话框,它不会。
    • @draksia 是的,它不适用于对话框,因为它们本身就是一个窗口,但对话框也可以覆盖 dispatchTouchEvent
    【解决方案2】:

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

    首先,触摸事件到达根视图。如果是onInterceptTouchEvent返回true,这个事件将传递给根视图的onTouchEvent。如果onTouchEvent返回false,这个事件将传递给根视图的父视图,如果返回true,此触摸事件将消失。如果onInterceptTouchEvent返回false,此触摸事件将传递给根视图的子视图。递归。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2010-11-06
      • 2019-06-10
      相关资源
      最近更新 更多