在你开始输入之前,我会说你要写下AccessibilityService
、AccessibilityNodeInfo
等的文档。
我已经正确地实现了我的AccessibilityService
,我甚至正确地得到了AccessibilityEvent
-s。
我只关心如何通过用户的点击在视图周围绘制矩形。
到目前为止,我所做的就是:
- 创建自定义视图类,实现
ViewGroup
- 我添加了
CustomView
(我写的类)作为View
和WindowManager
,拜特调用.addView()
方法 - 我通过从
onDraw()
重载方法调用canvas.drawRect()
在Canvas
上绘制矩形 - 当在屏幕上添加视图时,我使用
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
标志和WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY
类型作为参数传递到.addView()
方法
你可能想知道这里有什么问题。.
他们是:
1.当使用WindowManager
服务添加新的CustomView
时,整个新的View
覆盖了屏幕,其他按钮无法访问。(我真的不能点击任何东西,除了新添加的层,我认为它正在绘制在所有东西的顶部,所有东西都变得不可点击)
1.添加自定义视图作为一个层,而不是直接在一些视图周围绘制,导致(或不,我不知道确切)onAccessibilityEvent(event: AccessibilityEvent)
中的event.source.getBoundsInScreen(rect)
存储用户单击按钮的错误方向。(当我用canvas.drawRect(rect, mpaint)
绘制相同的矩形时,矩形并不完全围绕视图显示,有些坐标是错误的)
我 * 想 * 让我的AccessibilityService
像Google TalkBack那样画矩形。
Google TalkBack在视图周围绘制了完美的矩形,但不幸的是,我的没有。
- 下面是我的应用程序绘制矩形的截图:(点击“9”)
- 下面是Google TalkBack点击“9”按钮的截图:
谢谢。
2条答案
按热度按时间rfbsl7qr1#
神奇的是TalkBack * 不会 * 画盒子。它实际上是在应用程序进程中绘制的。ViewRootImpl中有处理它的代码。此功能只能在启用Touch Exploration时使用,这使得它无法用于对与TalkBack非常相似的用户体验不感兴趣的任何内容。
预计后续行动,不,我们不打算打开这个。覆盖,虽然偏移量总是很麻烦,但它是一种更具可扩展性的方法,可以帮助服务突出显示内容。
hrirmatl2#
我注意到如果你减去状态栏的高度,对齐效果会更好
但我同样看到边界是不一致的,是否需要偏移量在应用程序和设备的屏幕大小上发生了变化。