Google TalkBack 服务如何在 buttons/texts/images/etc 上绘制矩形?

How Google TalkBack service draws Rectangle over buttons/texts/images/etc.?

在你开始打字之前,我会说你要写下 AccessibilityServiceAccessibilityNodeInfo 等的文档

我已经正确地实现了我的 AccessibilityService,我什至正确地得到了 AccessibilityEvent-s。

我只关心如何通过用户点击在视图周围绘制矩形。

到目前为止我对此做了什么:

你可能想知道这里有什么问题..

他们在这里:

  1. 使用WindowManager服务添加新的CustomView时,整个新的View覆盖了屏幕,其他按钮无法访问。 (除了新添加的层,我真的不能点击任何东西,我认为它被绘制在所有东西之上并且一切都变得不可点击)
  2. 将自定义视图添加为图层而不是直接在某些视图周围绘制,导致(或不是,我不完全知道)event.source.getBoundsInScreen(rect)onAccessibilityEvent(event: AccessibilityEvent) 中存储错误的按钮点击方向用户。 (当我用 canvas.drawRect(rect, mpaint) 绘制相同的矩形时,矩形没有准确地显示在视图周围,一些坐标是错误的)

想要让我的AccessibilityServiceGoogle TalkBack那样绘制矩形。

Google TalkBack 在视图周围绘制 PERFECT 矩形,但是不幸的是,我的没有。

谢谢。

神奇之处在于 TalkBack 不会 绘制框。它实际上是在app进程中绘制的。 ViewRootImpl 中有处理它的代码。此功能只能在启用 Touch Exploration 时使用,这使得它无法用于对与 TalkBack 非常相似的用户体验不感兴趣的任何事物。

期待后续,不,我们不打算打开它。覆盖,虽然偏移量总是很繁琐,但它是一种更具可扩展性的方法来帮助服务突出显示内容。