【问题标题】:Getting all MotionEvents with WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH使用 WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH 获取所有 MotionEvents
【发布时间】:2011-10-07 05:25:51
【问题描述】:

我的问题直接指向这个question。该问题的答案显示了如何创建ViewGroup,将其嵌入WindowManager,并允许WindowManager 通过onTouchEvent(MotionEvent event) 捕获MotionEvents。 WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH 是允许这个ViewGroup 接收MotionEvents 的标志。但是,根据文档,这个标志

...不会收到完整的向下/移动/向上手势

我想知道是否有解决方法或方法,以便我可以获取所有触摸事件,包括向下、移动和向上。概念证明在应用程序Wave Launcher 中,它使用相同的概念,但能够接收的不仅仅是单个ACTION_OUTSIDE 事件。

【问题讨论】:

  • 这里我也面临同样的问题,不知道该怎么办。
  • 我实际上已经尝试向几个拥有类似应用程序的开发人员发送电子邮件,但他们都不会回复我或为我提供答案。
  • 我用谷歌搜索了很多,但找不到解决方案。
  • 同样如此,我已经在 Google 上搜索了几乎所有可能的关键字,但我最终一遍又一遍地得到相同的结果。

标签: android view action flags layoutparams


【解决方案1】:

不,你不能,这在很大程度上是设计使然。

Wave Launcher 不这样做,它有一个 UI 元素,您可以在其中启动触摸手势,然后与标准一样,甚至调度所有触摸事件都会传递到第一个向下点的窗口,直到最终向上。

【讨论】:

  • 你想知道具体是怎么做到的吗?不只是一个概念?
【解决方案2】:

我意识到这是一个老问题,但我在尝试完成类似的事情时偶然发现了它。我也发现了这个,希望对某人有帮助:http://www.section465.com/code_OverlayView/

要创建覆盖视图,在设置 LayoutParams 时需要 将类型设置为 TYPE_SYSTEM_OVERLAY 并使用标志 FLAG_WATCH_OUTSIDE_TOUCH。这提出了一个问题,因为作为 Android 文档指出:“您将不会收到完整的 down/move/up 手势,只有第一个 down 的位置作为一个 ACTION_OUTSIDE。”为了接收完整的触摸事件数组 您需要使用 TYPE_SYSTEM_ALERT 类型,但这会导致 覆盖以接管屏幕并停止与其他人的交互 元素。解决方案是同时使用 TYPE_SYSTEM_OVERLAY 和 TYPE_SYSTEM_ALERT 并通过更改类型在它们之间切换 LayoutParams 根据需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多