什麼是事件分發機制?主要用來解決什麼問題?

2021-10-22 22:54:40 字數 1400 閱讀 8257

在android開發中會經常遇到滑動衝突(比如scrollview或是sliddingmenu與listview的巢狀)的問題,需要我們深入的了解android事件響應機制才能解決,事件響應機制已經是android開發者必不可少的知識。面試找工作的時候也是面試官經常會問的乙個問題。

1.涉及到事件響應的常用方法構成

使用者在手指與螢幕接觸過程中通過motionevent物件產生一系列事件,它有四種狀態:

motionevent.action_down :手指按下螢幕的瞬間(一切事件的開始)

motionevent.action_move :手指在螢幕上移動

motionevent.action_up :手指離開螢幕瞬間

motionevent.action_cancel :取消手勢,一般由程式產生,不會由使用者產生

android事件處理涉及到的三個重要函式

1、事件分發:public boolean dispatchtouchevent(motionevent ev)

return true: 表示該view內部消化掉所有事件。

return false:事件將不再被本層分發,交由上層的控制項的ontouchevent進行消費(如果本層已經是activity,那麼事件被系統消費和處理)。

返回系統預設的super.dispatchtouchevent,則事件交給本層的攔截onintercepttouchevent進行處理。

2、事件攔截:public boolean onintercepttouchevent(motionevent ev)

return true:表示將事件進行攔截,交由本層的ontouchevent進行處理。

return false:表示不對事件進行攔截,交給子控制項的dispatchtouchevent進行分發。

返回系統預設的super.onintercepttouchevent,預設表示攔截該事件,並將事件傳遞給當前view的ontouchevent方法,和return true一樣。

3、事件響應:public boolean ontouchevent(motionevent ev)

return true:表示直接消費此事件,該事件終結。

return false:則表示不響應事件,那麼該事件將會不斷向上層view的ontouchevent方法傳遞,直到某個view的ontouchevent方法返回true,如果到了最頂層view還是返回false,那麼認為該事件不消耗,則在同乙個事件系列中,當前view無法再次接收到事件,該事件會交由activity的ontouchevent進行處理;

如果return super.dispatchtouchevent(ev),則表示不響應事件,結果與return false一樣。

什麼是事件分發執行緒

序列 推測應是監聽模式,應是所有元件新增的 都註冊到了事件分發執行緒中,並在事件分發執行緒執行,但是訊息佇列是序列的導致耗時任務會拖慢swing介面 預設情況下,所有的awt或者基於swing的應用程式,都是開始於兩個執行緒的。其中乙個就是主線程,它處理main方法裡面的 另外乙個執行緒,被稱作 事...

事件分發機制

android中的事件型別分為按鍵事件和螢幕觸控事件,touch事件是螢幕觸控事件的基礎事件,有必要對它進行深入的了解。乙個最簡單的螢幕觸控動作觸發了一系列touch事件 action down action move action move action move.action move acti...

事件分發機制

對於安卓事件傳遞和消費機制,他給我們提供了3個方法,dispatchtouchevent onintercepttouchevent 和ontouchevent 當監聽到事件時,首先由activity捕獲 開始進入事件分發流程.dispatchtouchevent 如果返回的是true,表明事件不會...