什么是事件?
什么是事件分發(fā)機制祭犯?
在我們通過屏幕與手機交互的時候,每一次點擊滚停、長按沃粗、移動等都是一個個事件。按照面向?qū)ο蟮乃枷爰耄@些一個個事件都被封裝成了MotionEvent最盅。
分發(fā)機制就是某一個事件從屏幕傳遞給app視圖中的各個View,然后由其中的某個View來使用這一事件或者忽略這一事件起惕,這整個過程的控制就是分發(fā)機制了涡贱。
要注意的是,事件分發(fā)機制中惹想,事件是按一個事件序列的形式分發(fā)給View的蔑鹦。這一序列由 ACTION_DOWN 開始卜范,經(jīng)過一系列 ACTION_MOVE 等事件沽瞭,最后以 ACTION_UP 事件結(jié)束爬迟。這一個序列中的所有事件,要么被忽略锋叨,要么就只能有一個事件能使用垄分。要是同一個序列,比如從按下到移動這一系列的動作娃磺,不同的View都能接受的話薄湿,那整個界面就會非常混亂偷卧,而且邏輯很復(fù)雜豺瘤。
Android 事件分發(fā)流
1赛糟、如果事件不被中斷派任,整個事件流向是一個類U型圖
看上圖深藍色的線,對于返回false的情況妒穴,事件都是傳給父控件onTouchEvent處理宋税。
對于dispatchTouchEvent 返回 false 的含義應(yīng)該是:事件停止往子View傳遞和分發(fā)同時開始往父控件回溯(父控件的onTouchEvent開始從下往上回傳直到某個onTouchEvent return true),事件分發(fā)機制就像遞歸讼油,return false 的意義就是遞歸停止然后開始回溯杰赛。
對于onTouchEvent return false 就比較簡單了,它就是不消費事件矮台,并讓事件繼續(xù)往父控件的方向從下往上流動乏屯。
分發(fā)事件的組件
分發(fā)的核心方法
負責(zé)對事件進行分發(fā)的方法主要有三個唱较,分別是:
dispatchTouchEvent(
onTouchEvent()
onInterceptTouchEvent()