概览
命中是指指针事件与图形视图之间的交互点。
在点击测试过程中,景观团队会决定应传送哪些命中 与哪些客户端相关联
命中区域
客户端提交的图形内容本身是无法点击的。相反, 是附加到 Flatland 转换的矩形点击区域, 来接收输入事件。
为便于开发者使用 Flatland API,每个视图都有一个默认命中 区域。这些命中区域充当常规命中区域,但会隐式添加到 调用 SetRootView() 中的根转换。请参阅 默认命中区域部分。
语义可见性
Flatland 客户端可附加到转换的命中区域有两种: 语义可见和语义上不可见的命中区域。属性 语义可见性可以被大多数客户端忽略,因为它只在极少数情况下使用 无障碍功能特有的应用场景请参阅 语义可见性 页面。
算法简要概览
在给定 (x,y) 点发生命中后,包含地理位置最顶层的 (拓扑上最后一个)与 (x,y) 相交的语义上兼容的命中区域 收到命中。我们把要求分成几个组成部分。
最热门
如果给定包含内容的父转换和子转换,子转换将绘制在 在父转换的顶部,在拓扑上也在父转换之后。
给定两个具有相同父项的同级转换,子项通过以下方法添加了 last AddChild() 在拓扑上位于其同级之后。
语义兼容性
语义命中测试不会与语义上不可见的命中区域进行交互。
请参阅语义可见性 页面。
重叠
位于命中区域边界上的命中会被视为 。
如果两个或多个转换共用一个边框,则确定规则将转到 最后进行拓扑转换。
默认命中区域
虽然视图本身默认情况下并非可命中,但 API 客户端往往期望 内容在创建后可交互,因此 Flatland 可以创建一个全屏 通过 SetRootTransform() 调用(除非客户端手动指定自己的命中) 区域。
DHR 会达到最大尺寸,因此将视图尺寸调大一点应该不会导致 变得无命中
默认命中区域的语义可总结为以下规则:
- 在调用 SetRootTransform(T) 期间,将一个 DHR 添加到根转换 T 当且仅当先前没有 SetHitRegions(T) 调用时。
- 在 SetRootTransform(T) 之后调用 SetHitRegions(T, Hit_region_vector) 调用将覆盖 DHR,即使 |hit_region_vector|为空。
- 系统只会为给定的根转换安装 DHR,只要它是根转换即可 视图。
- 给定转换 T 的 DHR 不受任何命中区域操作的影响 任何其他转换,即 U。
为帮助说明语义,我们来看一些示例。
场景 1
SetRootTransform(T)
结束状态:T 有一个 DHR。
场景 2
SetRootTransform(T)
SetRootTransform(U)
结束状态:T 没有命中区域,U 有 DHR。
场景 3
场景 3A
SetRootTransform(T)
SetHitRegions(T, {HR1})
场景 3B
SetHitRegions(T, {HR1})
SetRootTransform(T)
3A 和 3B 的结束状态:T 有一个命中区域 HR1。没有 DHR。
场景 4
SetRootTransform(T)
SetHitRegions(T, { {} })
结束状态:T 没有命中区域
场景 5
SetRootTransform(T)
SetRootTransform(U)
SetHitRegions(T, {HR1, HR2})
结束状态:T 有两个命中区域,HR1 和 HR2。U 具有 DHR。