获取正在接收所有触摸事件的视图

Bri*_*ian 7 events android overlay view touch

我有一个高于一切坐在一个系统的覆盖ActivitiesWindows.唯一的问题是它只能检测MotionEvents用户何时将他/她放在屏幕上(它无法跟踪手指的移动或检测到手指抬起时).作为一种可能的解决方案,我已经实现了第二个视图(我将其称为跟踪视图),该视图能够处理所有触摸事件,但保持隐藏,直到系统覆盖检测到所需位置的触摸为止; 在那种情况下,它将调出跟踪视图.唯一的问题是,跟踪视图在用户将他/她的手指放回屏幕之前不会开始检测触摸事件.因此,为了解决这个问题,我想拦截获取触摸事件(即系统覆盖下的视图)的视图,并将其所有触摸事件转发到跟踪视图以进行处理.

有谁知道我如何获得接收所有触摸事件的视图并重定向它接收的所有触摸事件?

这个问题涉及这个问题中使用的例子.

hac*_*bod 6

你不能完全按照你的要求去做.输入系统非常小心地限制哪些窗口可以接收哪些事件; 它故意不像其他系统,如Microsoft Windows,您可以参与低级事件调度,看看发生了什么.唯一允许的是:

  • 一个窗口,可以接收所有会发送到它或它后面的任何窗口的事件(不允许这些事件被它后面的窗口接收).这被称为"触摸模式".
  • 一个窗口,可以接收其矩形内的所有事件,而不会让它们进入窗口后面的窗口,但是矩形之外的事件可以转到它后面的相应窗口,而不会被它看到.这被称为"非触摸模式".
  • "非触摸模式"的变体,允许仅告知窗口外发生的向下事件.但是,它不会收到任何其他事件,并作为特殊操作代码提供:http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_OUTSIDE

事件调度到窗口的另一个核心规则是,一旦选择窗口作为触摸事件的目标,它将继续接收事件流直到最终完成.传统上在Android中,这将适用于触摸手势的所有其他手指(它接收所有手指,无论它们出现在何处,直到最后一根手指上升).更新版本的平台允许您将此行为修改为多点触控:http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SPLIT_TOUCH

这些是您工具箱中的工具.您可以使用它们构建可能的内容,但这并不是为了允许您与事件系统进行任何可能的交互,因此会有限制.