使用WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH获取所有MotionEvent

时间:2011-07-17 17:48:53

标签: android view action flags layoutparams

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

  

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

我想知道是否有解决办法或方法,以便我可以获得所有触摸事件,包括向下,向上和向上。应用Wave Launcher中的概念验证使用了相同的概念,但只能收到一个ACTION_OUTSIDE事件。

2 个答案:

答案 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根据需要。