在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,表明事件不會...