我的问题直接引用了这个question。该问题的答案显示了如何创建ViewGroup
,将其嵌入WindowManager
,并允许WindowManager
通过MotionEvent
捕获onTouchEvent(MotionEvent event)
。 WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
是允许此ViewGroup
收到MotionEvent
的标记。但是,根据文档,这个标志
...不会收到完整的向下/移动/向上手势
我想知道是否有解决办法或方法,以便我可以获得所有触摸事件,包括向下,向上和向上。应用Wave Launcher中的概念验证使用了相同的概念,但只能收到一个ACTION_OUTSIDE
事件。
答案 0 :(得分:3)
不,你不能,这非常符合设计。
Wave Launcher不执行此操作,它有一个UI元素,您可以在其中开始触摸手势,然后与标准甚至调度一样,所有触摸事件都会传递到第一个向下点的窗口,直到最终结束。
答案 1 :(得分:2)
我意识到这是一个老问题,但我在尝试完成类似的事情时偶然发现了它。我也发现了这一点,希望它对某人有帮助:http://www.section465.com/code_OverlayView/
要设置叠加视图,请在设置所需的LayoutParams时使用 将类型设置为TYPE_SYSTEM_OVERLAY并使用该标志 FLAG_WATCH_OUTSIDE_TOUCH。这提出了一个问题因为 Android文档说:“你不会收到全部 向下/向上/向上移动手势,只有第一个向下的位置为 ACTION_OUTSIDE。“为了接收完整的触摸事件 你需要使用TYPE_SYSTEM_ALERT类型,但这会导致 覆盖以接管屏幕并停止与其他人的互动 元素。解决方案是同时使用TYPE_SYSTEM_OVERLAY和 TYPE_SYSTEM_ALERT并通过更改类型在它们之间切换 LayoutParams根据需要。