我的系统覆盖图位于所有Activities
和Windows
之上。唯一的问题是它只能在用户将他/她放下屏幕时检测MotionEvents
(它无法跟踪手指的移动或检测到手指抬起时)。作为一种可能的解决方案,我已经实现了第二个视图(我将其称为跟踪视图),该视图能够处理所有触摸事件,但保持隐藏,直到系统覆盖检测到所需位置的触摸为止;在那种情况下,它将调出跟踪视图。唯一的问题是,跟踪视图在用户将他/她的手指放回屏幕之前不会开始检测触摸事件。因此,为了解决这个问题,我想拦截获取触摸事件(即系统覆盖下的视图)的视图,并将其所有触摸事件转发到跟踪视图以进行处理。
有谁知道我如何获得接收所有触摸事件的视图并重定向它接收的所有触摸事件?
此问题涉及此question中使用的示例。
答案 0 :(得分:6)
你无法完全按照自己的要求去做。输入系统非常小心地限制哪些窗口可以接收哪些事件;它故意不像其他系统,如Microsoft Windows,您可以参与低级事件调度,看看发生了什么。唯一允许的是:
事件调度到窗口的另一个核心规则是,一旦选择了一个窗口作为触摸事件的目标,它将继续接收事件流直到最后一次。传统上在Android中,这将适用于触摸手势的所有其他手指(它接收所有手指,无论它们出现在何处,直到最后一根手指上升)。更新版本的平台允许您将此行为修改为具有多点触控功能:http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SPLIT_TOUCH
因此,这些是您工具箱中的工具。您可以使用它们构建可能的内容,但这并不是为了允许您与事件系统进行任何可能的交互,因此会有限制。