【问题标题】:Getting the View that is receiving all the touch events获取正在接收所有触摸事件的视图
【发布时间】:2011-07-19 04:03:15
【问题描述】:

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

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

这个问题指的是question中使用的例子。

【问题讨论】:

  • 我也有同样的问题,你找到答案了吗?
  • 对不起,我原本打算在我正在制作的特殊界面上使用这种方法。我最终放弃了这个想法并选择了一个不同的想法。我仍然很想知道是否有人对此有答案。
  • 感谢 Aerodroid,你对这个 nw 有什么建议吗,因为我也需要通过任何其他方式来实现它。
  • 好吧,我最初的界面想法是检测一些滑动手势,但在无法找到有效解决方案的挫折之后,我只好构建一个使用点击而不是滑动的界面。
  • 我在市场上看到了一个应用程序,我认为它具有此功能。请参考这个。 market.android.com/details?id=mobi.conduction.swipepad.android

标签: android events view touch overlay


【解决方案1】:

你不能完全按照你的要求去做。输入系统非常小心地限制了哪些窗口可以接收哪些事件;它故意不像其他系统,如 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多