我基本上是试图从系统覆盖的东西中获取所有的触摸事件数据,基于这些触摸数据移动我的精灵,然后允许OS/homescreen/browser按照它应该的方式操作这些数据(反之亦然)。我也发现了类似的问题,但没有什么能让我找到我没有去过的地方:
Getting the View that is receiving all the touch events
(已实现,结果如下) Creating a system overlay window (always on top)
我能做什么:
我可以抓取所有的触摸事件并通过移动精灵来处理它们,而不允许OS/homescreen/browser看到它们中的任何一个,或者我可以允许触摸事件通过并只获得一个“TOUCH_OUTSIDE”,让我的应用程序执行操作。
我未曾实现的目标:
我无论如何也想不出一种让两者都能处理数据的方法。我能想到的唯一不能实现的方法是:截取我应用程序中的数据,并将其传递到OS/homescreen/browser,以允许OS/homescreen/browser首先获取数据,然后以某种方式获得一个带有信息的回调,允许OS/homescreen/browser获取数据,对数据进行操作,并轮询它们的滚动/位置值,以便在我的应用程序中对其进行操作。
我担心这是不可能的,我想我在一些文档中读到了一些我现在找不到的东西:“要么全有要么什么都没有,要么你的视图得到所有的事件,要么一个都没有。”
(为了避免混淆,我并不是说我有两个视图。我的意思是,我有一个视图,通过覆盖OS/homescreen/browser的活动/服务控制。如果你愿意,就像一块玻璃。)
感谢您提供的任何有用的信息,非常感谢!
为了避免混淆,更新在下面发布了我自己的文档。
发布于 2012-02-02 03:30:23
我找到了这个文档,它很大程度上说明不可能同时做到这两点:Android : Multi touch and TYPE_SYSTEM_OVERLAY
他们讨论了变通方法,但我认为他们中的任何一个实际上都不会真正实现我想要做的事情。两者都将事件提供给底层应用程序,并且能够窥探它们来为我自己采取行动。
要创建覆盖视图,在设置LayoutParams时,您需要将类型设置为TYPE_SYSTEM_OVERLAY并使用标志FLAG_WATCH_OUTSIDE_TOUCH。这带来了一个问题,因为正如安卓文档所述:“您将不会收到完整的向下/移动/向上手势,只会收到第一个向下的位置作为一个ACTION_OUTSIDE。”为了接收完整的触摸事件数组,您需要使用TYPE_SYSTEM_ALERT类型,但这会导致overlay占据屏幕并停止与其他元素的交互。
任何人不同意我都希望听到好消息:-D
发布于 2012-02-01 05:09:38
你可以使用GestureOverlayView,如果你想隐藏它绘制的线条,你可以将颜色设置为透明#00000000,这样它就不会显示出来,然后你就可以捕捉所有的触摸和手势。
http://developer.android.com/resources/articles/gestures.html
发布于 2018-02-12 08:02:30
我也在找同样的东西。
这个标志对我很有用,FLAG_NOT_TOUCH_MODAL
在Android 7和8设置上的工作方式如下。
到目前为止,我实现的唯一操作是触摸关闭覆盖窗口。
我还使用了这里的Example System Overlay Code on Github中的代码,这是获取事件所需的。
顺便说一句,谷歌地图在Android 8上做得非常好,你可以拖动覆盖窗口,调整窗口大小,或者关闭窗口。所有其他应用程序在运行时都可以正常运行。
var type = 0
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
{
type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
}
var flags = FLAG_NOT_TOUCH_MODAL
mOverlayLayoutParams = WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, type, flags, PixelFormat.TRANSLUCENT)
https://stackoverflow.com/questions/9085022
复制相似问题