Rav*_*avs 9 events android multi-touch
我试图在系统覆盖视图上获得多个触摸事件,但我只接收 MotionEvent.ACTION_OUTSIDE事件.
是否有任何可能的方法在系统覆盖上获得多个触摸事件?
任何示例或链接都会非常有用.
jaw*_*are 25
要创建叠加视图,在设置时LayoutParams需要将类型设置为TYPE_SYSTEM_OVERLAY并使用标志FLAG_WATCH_OUTSIDE_TOUCH.这提出了一个问题,因为Android文档指出:
你将不会收到完整的向下/移动/向上的手势,只有第一个向下的位置作为
ACTION_OUTSIDE.
为了接收完整的触摸事件数组,您需要使用TYPE_SYSTEM_ALERT类型,但这会导致叠加层接管屏幕并停止与其他元素的交互.解决方案是使用两者TYPE_SYSTEM_OVERLAY并TYPE_SYSTEM_ALERT通过LayoutParams根据需要更改类型并在它们之间切换.
这通过以下方式实现:
ACTION_OUTSIDE动议活动.LayoutParams类型切换为TYPE_SYSTEM_ALERTTYPE_SYSTEM_OVERLAY要记住的一件事是,ACTION_OUTSIDE运动事件总是传递给屏幕上的其他元素.因此,例如,如果叠加层位于按钮的顶部,则该按钮也将接收运动事件,并且无法停止它.
还要确保将SYSTEM_ALERT_WINDOW权限添加到mainifest文件中.
我在这里发布了完整的解决方案:
http ://www.jawsware.mobi/code_OverlayView/ (更新)
它包括所有源代码和下载整个示例项目的链接.
Android 4.0更新 - 2013年1月3日
要创建叠加视图,在设置LayoutParams时请勿将类型设置为TYPE_SYSTEM_OVERLAY.
而是将其设置为TYPE_PHONE.
使用以下标志:
FLAG_NOT_TOUCH_MODAL
FLAG_WATCH_OUTSIDE_TOUCH
FLAG_NOT_TOUCH_MODAL<<我发现这个非常重要.没有它,重点是叠加和软键(主页,菜单等)按下不传递给下面的活动.
此外,上一个链接(上面)已更新以反映此更新.
Sam*_* Lu 10
从Android 4.x开始,Android团队Android团队通过添加新函数adjustWindowParamsLw()修复了潜在的安全问题,其中它将为TYPE_SYSTEM_OVERLAY窗口添加FLAG_NOT_FOCUSABLE,FLAG_NOT_TOUCHABLE和删除FLAG_WATCH_OUTSIDE_TOUCH标志.
那个TYPE_SYSTEM_OVERLAY窗口不会在ICS平台上收到任何触摸事件.
更新:2016/5/4 TYPE_TOAST无法在Android 4.0~4.3上接收触摸事件.它与TYPE_SYSTEM_OVERLAY相同.在Android 4.4及更高版本中,TYPE_TOAST已从排除列表中删除,因此您可以使用TYPE_TOAST在Android 4.4+设备上接收触摸事件.
| 归档时间: |
|
| 查看次数: |
13439 次 |
| 最近记录: |