Android TV開發事件傳遞機制和焦點問題

2022-09-23 11:03:11 字數 1513 閱讀 3018

android tv開發事件傳遞機制和焦點問題

在說道焦點問題的時候,我們必須想要知道事件。

事件傳遞機制就是當你觸發某件事物時候它做出的回應,而傳遞機制就是他做出反應的路徑。

首先我們要知道下面三個方法:

1.dispatchtouchevent 事件分發(事件向下級傳遞)

2.onintercepttouchevent 時間攔截

3.ontouchevent 時間的處理

知道了方法,接下來介紹之間的關係。

**重點內容**

dispatchtouchevent -->onintercepttouchevent -->ontouchevent那麼activity是如何將事件傳下去的。

事件首先進行分發,通過其返回值控制是否執行事件的攔截,然後在事件攔截的方法中判斷是否執行對事件在哪塊進行處理。(注意這裡說的是那塊,後文有解釋)

接下來說說返回值:

dispatchtouchevent 有3種返回值 super.dispatchtouchevent ,false,true.

super.dispatchtouchevent是預設的,所以代表的是事件進行向下的分發。

true 也是代表事件向下分發

false 代表的是不再向下分發,也意味著,當action_down 出發後,後續的事件將失去響應。

在viewgroup中

onintercepttouchevent 返回false表示,他將呼叫子類view的ontouchevent方法,如果返回true那麼則呼叫自己的ontouchevent方法。

ontouchevent方法返回true表示事件已經被處理。返回false表示事件未被處理,呼叫子view的ontouchevent事件

在view中

onintercepttouchevent 返回true呼叫自己的ontouchevent事件,false表示呼叫到父類的onintercepttouchevent 。

ontouchevent返回true表示呼叫自己的方法,false表示呼叫父類的ontouchevent方法。

接下來說道焦點,tv開發有時候總是獲取不了焦點,主要是因為你沒搞懂事件的優先順序。

ontouchlistener的ontouch方法優先順序比ontouchevent高,會先觸發。假如ontouch方法返回false會接著觸發ontouchevent,反之ontouchevent方法不會被呼叫。內建諸如click事件的實現等等都基於ontouchevent,假如ontouch返回true,這些事件將不會被觸發。內建的click事件都是基於ontouchevent方法的,如果ontouchevent方法不執行,那麼多有的點選時間都泡湯了。這就是有時候你的點選沒反應的原因。

在tv開發中,焦點不同於手機,手機屏是手指點到那,焦點到哪然後觸發點選時間,而電視則是通過遙控先將焦點移到那塊,在通過點選來進行觸發。

setfocusable() 設定view接受焦點的資格

setfocusintouchmode() 對應在觸控模式下,設定是否有焦點來響應點觸的資格。

Android TV開發隨筆 序言

做android應用開發很長時間了,一直都沒有寫什麼東西出來,反而在遊戲方面寫了一系列的文章,感覺太對不住應用了,現在想想自己在應用上還是知之甚少,也沒怎麼深入研究它,以後會把空閒的時間多看看framework層的東西,也提公升一下 自己。最近在做tv上的專案,估計今年也就是在這一塊了,由於種種原因...

IOS 開發 手勢 及事件傳遞機理

ios手勢是ios開發不可或缺的一部分,但對於ios的手勢及事件相應機理大家並不知道,所以今天給大家講一講ios的事件相應機理 首先,ios的事件傳遞是依靠 事件鏈 傳遞的,當傳遞到鏈的某乙個鏈環上的物件處理了這個事件,事件就停止傳遞。那麼事件鏈是神馬東西?事件鏈是由一組uiresponder 能夠...

Android TV 電視除錯和遙控器事件監聽

要進行android tv開發免不了要進行真機除錯。1 確定電視盒子和開發機器在同一區域網中 2 開啟電視盒子的adb允許除錯開關 3 進入adb所在資料夾進行adb鏈結 adb connect 192.168.1.106示例 如下 switch k case keyevent.keycode dp...