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

7
我有一个系统悬浮窗口,它位于所有的ActivitiesWindows之上。唯一的问题是,它只能在用户按下屏幕时检测到MotionEvents(不能跟踪手指的移动或检测手指何时离开)。作为一个可能的解决方案,我实现了第二个视图(我称之为跟踪视图),它能够处理所有触摸事件,但在系统悬浮窗口检测到所需位置的触摸时保持隐藏;在这种情况下,它将显示跟踪视图。唯一的问题是,直到用户再次按下屏幕后,跟踪视图才会开始检测触摸事件。因此,为了解决这个问题,我想拦截接收触摸事件的视图(即系统悬浮窗口下方的视图),并将所有接收到的触摸事件转发给跟踪视图进行处理。
有没有人知道我如何获取正在接收所有触摸事件的视图,并将它接收到的所有触摸事件重定向到跟踪视图进行处理?
此问题涉及这个问题中使用的示例。

我有同样的问题,你找到答案了吗? - fargath
抱歉,我最初打算使用这种方法来制作一个特殊的界面。但是后来我放弃了那个想法,选择了另一种方法。如果有人知道答案,我仍然很想知道。 - Brian
谢谢 Aerodroid,你对这个新的问题有什么建议吗?因为我还需要另一种方法来实现它。 - fargath
我在市场上看到了一个应用程序,我认为它具有这个功能。请参考此链接:https://market.android.com/details?id=mobi.conduction.swipepad.android - fargath
我提出这个问题的初衷是为了实现一个系统覆盖视图(类似于Messenger ChatHeads)。如果这正是你想要实现的,可以看一下这个链接:https://gist.github.com/bjoernQ/6975256 - Brian
显示剩余6条评论
1个回答

6
您所要求的事情是做不到的。输入系统非常小心地限制了窗口可以接收哪些事件;它故意不像其他系统(如Microsoft Windows),您可以参与低级别的事件分派并查看所有正在进行的操作。只允许以下几种情况:
  • 一个窗口可以接收所有会发送给它或任何在它后面的窗口的事件(而不允许那些事件被后面的窗口接收)。这称为“触摸模态”。
  • 一个窗口可以接收其矩形内的所有事件,而不让这些事件传递到后面的窗口,但允许矩形外的事件传递到相应的窗口后面,而不被其看到。这称为“非触摸模态”。
  • “非触摸模态”的变体,它可以被告知发生在其窗口外部的down事件。然而,它将不会接收任何其他进一步的事件,并作为特殊的操作代码交付:http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_OUTSIDE

事件分派到窗口的另一个核心规则是,一旦一个窗口被选为触摸事件的目标,它将继续接收事件流,直到最后的up。在Android中,传统上这适用于触摸手势的所有进一步手指(它接收所有手指,无论它们出现在哪里,直到最后一个手指抬起)。平台的更近期版本允许您修改此行为以支持多点触控:http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SPLIT_TOUCH

所以这些是您工具箱中的工具。您可以使用它们构建可能的事物,但这并不意味着您可以与事件系统进行任何可能的交互,因此会有限制。


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