gpt4 book ai didi

android - 获取接收所有触摸事件的 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:28 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

关于android - 获取接收所有触摸事件的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6742177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com