Android 谷歌对讲服务如何在按钮/文本/图像等上绘制矩形。?
在你开始打字之前,我想说你要写下Android 谷歌对讲服务如何在按钮/文本/图像等上绘制矩形。?,android,kotlin,canvas,ondraw,accessibilityservice,Android,Kotlin,Canvas,Ondraw,Accessibilityservice,在你开始打字之前,我想说你要写下AccessibilityService,AccessibilityNodeInfo,等等的文档 我已经正确地实现了我的可访问性服务,甚至正确地获得了可访问性事件-s 我只关心如何通过用户的点击在视图周围绘制矩形 到目前为止,我在这方面做了什么: 创建了自定义视图类,该类实现了ViewGroup 我通过调用.addView()方法将CustomView(我编写的类)添加为带有WindowManager的视图 我通过调用onDraw()重载方法中的Canvas.d
AccessibilityService
,AccessibilityNodeInfo
,等等的文档
我已经正确地实现了我的可访问性服务
,甚至正确地获得了可访问性事件
-s
我只关心如何通过用户的点击在视图周围绘制矩形
到目前为止,我在这方面做了什么:
- 创建了自定义视图类,该类实现了
ViewGroup
- 我通过调用
方法将.addView()
(我编写的类)添加为带有CustomView
的WindowManager
视图
- 我通过调用
重载方法中的onDraw()
在Canvas.drawRect()
上绘制矩形Canvas
- 在屏幕上添加视图时,我使用
FLAG和WindowManager.LayoutParams.FLAG\u WATCH\u OUTSIDE\u TOUCH
键入要传递到WindowManager.LayoutParams.TYPE\u ACCESSIBILITY\u OVERLAY
方法中的参数.addView()
WindowManager
服务添加新的CustomView
时,整个新的View
会覆盖屏幕,无法访问其他按钮。(除了新添加的图层,我简直无法点击任何东西,我认为它被绘制在所有图层之上,所有图层都变得不可点击)event.source.getBoundsInScreen(rect)
存储用户单击的按钮的错误方向。(当我用canvas.drawRect(rect,mpaint)
绘制同一个矩形时,该矩形没有精确显示在视图周围,某些坐标是错误的)AccessibilityService
像它那样画矩形
Google TalkBack在视图周围绘制了PERFECT矩形,但不幸的是,我的没有
- 以下是我的应用程序绘制矩形的屏幕截图:(单击“9”)
- 以下是点击“9”按钮的谷歌对讲的屏幕截图:
谢谢。神奇的是,对讲机不会吸引观众。它实际上是在应用程序过程中绘制的。ViewRootImpl中有处理它的代码。此功能只能在启用触摸探索时使用,这使得它无法用于任何对与TalkBack非常类似的用户体验不感兴趣的东西
期待后续行动,不,我们不打算公开这个。覆盖,虽然偏移总是很精细,但它是一种更具可伸缩性的方法,可以帮助服务突出显示内容。在技术方面对您所做的工作没有帮助,但该矩形看起来偏移了视图高度的一半-您确定您没有错算坐标吗?嘿,谢谢您的回复!这是onDraw的代码。我在计算坐标时添加了
-this.rectToDraw.height()/2
,但这在另一个应用程序中不起作用:/这里也是。奇怪的是,添加-this.rectToDraw.height()/2
就像计算器上的符咒。此处正确显示了矩形。。笑死我了。。我想我需要检查packageName
,然后再减去-this.rectToDraw.height()/2
,如果显示的是另一个包,则为计算器。您从哪里获得rectToDraw
?就像我说的,我对你正在使用的可访问性的东西一无所知,但是看起来你正在做的基本上是有效的,只是有一个非常可疑的50%偏移量的事情正在发生。在计算宽度/高度/x和y偏移时,是否考虑了填充?带有紫色按钮的图像看起来有垂直的填充或边距,但是计算器按钮不能从提供给我的event.source.getBoundsInScreen(矩形)
和rectangle
对象的onAccessibilityEvent
中直接绘制。我明白你的意思,也许紫色按钮有填充物之类的东西,但为什么谷歌对讲可以像在计算器中一样画矩形呢?:/我认为对讲机的智商要高出200,然后只需获得getBoundsInScreen
并绘制矩形。我会再次检查坐标计算。所以,正如我理解的答案,我几乎不可能像TalkBack那样画出视图周围的矩形,是吗?那太不幸了。那么我会在我的案例中找到一些解决方案。