命中測試

總覽

命中是指指標事件和圖形檢視區塊之間的互動點。

命中測試是指將哪些命中轉送至特定用戶端的程序。

造訪區域

客戶提交的圖像內容未含括,而且不會本身發揮作用。而是附加至 Flatland 轉換的矩形命中區域,可讓內容檢視畫面接收輸入事件。

為方便開發人員使用 Flatland API,每個檢視畫面都有預設的命中區域。這些命中區域可做為一般命中區域,但會以隱含方式新增至 SetRootView() 呼叫的根轉換中。詳情請參閱預設命中地區一節。

語意顯示設定

Flatland 用戶端可能會附加兩種命中區域類型,分別是語意可見和語意不可見的命中區域。大多數用戶端可以忽略語意瀏覽權限的屬性,因為這個屬性僅適用於罕見的無障礙用途。詳情請參閱「語意瀏覽權限」頁面。

演算法總覽

在某個點 (x,y) 發生命中時,如果檢視畫麵包含地理位置上最高 (以邏輯方式「最後」) 且與語意相容的命中區域,這些檢視畫面就會收到命中。讓我們將需求細分為元件部分。

最常出現

如果父項和子項轉換含有內容,則子項轉換會繪製在父項轉換頂端,也會在父項之後按照邏輯順序排列。

由於兩個同層級轉換具有相同的父項,因此子項透過 AddChild() 新增 last,會在同層級之後發生語義轉換。

語意相容性

語意命中測試不會與語意上不可見的命中區域互動。

詳情請參閱「語意瀏覽權限」頁面。

重疊

如果命中區域位於命中區域邊界,即可視為包含在命中區域。

如果兩個以上的轉換共用邊界,則緊湊的局部轉換會朝向最後一個轉換進行。

預設命中區域

雖然 View 本身並非預設為命中資料表,但 API 用戶端往往預期內容在建立時可以互動。因此,除非用戶端手動指定自己的命中區域,否則 Flatland 會透過 SetRootTransform() 呼叫安裝根轉換,為 View 建立全螢幕的預設命中區域 (DHR)。

DHR 會達到最大大小,因此,將檢視畫面放大,不應導致螢幕畫面的一部分變得無法發揮作用。

以下規則可總結預設命中區域的語意:

  1. 只有在「之前」沒有任何 SetHitRegions(T) 呼叫時,根轉換 (T) 才會新增至根轉換 (T)。
  2. 在 SetRootTransform(T) 呼叫「之後」呼叫 SetHitRegions(T, Hit_region_vector) 的部分,會覆寫 DHR,即使 |hit_region_vector| 為空白也一樣。
  3. 只有在指定的根轉換需要 DHR 時,系統才會安裝 DHR。
  4. 對其他轉換 (U) 的任何命中區域作業而言,特定轉換 T 的 DHR 不會受到影響。

讓我們來看看一些例子來說明語意。

情境 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。你沒有 DHR。