4

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

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

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

4

2 回答 2

3

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

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

于 2011-08-17T07:43:20.267 回答
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 的类型在它们之间切换。

于 2012-09-23T23:33:27.107 回答