-
activity事件分發(fā)流程
查看全部 -
view的事件分發(fā)流程
查看全部 -
Activity 事件分發(fā)
查看全部 -
Activity 負(fù)責(zé)生命周期和處理事件。
Window負(fù)責(zé)視圖的控制。
一個(gè)Activity包含了一個(gè)Window, 一個(gè)Window才真正代表了一個(gè)窗口。
Window包含了一個(gè)頂級(jí)的View -> DecorView
Activity中setContentView的視圖就是DecorView的子元素。
所有的事件都要經(jīng)過(guò)DecorView才會(huì)傳遞給我們的View。
傳遞層級(jí):Activity->Window->DecorView->ViewGroup->View
事件傳遞的三個(gè)主要對(duì)象:Activity、ViewGroup、View
查看全部 -
事件序列:從手指按下屏幕開(kāi)始,到手指離開(kāi)屏幕所產(chǎn)生的一系列事件。
傳遞層級(jí):Activity->Window->DecorView->ViewGroup->View
查看全部 -
View 事件傳遞
查看全部 -
熟記流程圖、翻看源碼
查看全部 -
事件默認(rèn)傳遞流程和在同一事件序列中的變化
查看全部 -
分別創(chuàng)建了MyActivity extends Activity,MyViewGroup extends FrameLayout,MyView extends View
然后分別重寫(xiě)他們需要的方法dispatchTouchEvent、onTouchEvent,特別的是在ViewGroup中多重寫(xiě)一個(gè)onInterceptTouchEvent
根據(jù)流程圖,可以發(fā)現(xiàn)
傳遞順序Activity-ViewGroup-View
由上自下的dispatvhTouchEventh互相傳遞后,到由下而上的onTouchEvent互相傳遞
查看全部 -
以上進(jìn)入分發(fā)的過(guò)程。判斷是否符合安全策略。符合安全策略-繼續(xù),是鼠標(biāo)-結(jié)束不分發(fā),
注冊(cè)了touchListener方法,里面的onTouch方法返回true標(biāo)志著事件被消費(fèi)了。
查看全部 -
如果不是取消事件并且沒(méi)有被分發(fā),繼續(xù)分發(fā)處理。
當(dāng)前動(dòng)作是按下、移動(dòng)時(shí),首先清空之前所有的觸摸點(diǎn)信息。然后獲取到可以接收的子view的集合
從前到后遍歷子view,嘗試找到真正點(diǎn)擊的view。
用戶沒(méi)有定義了view的繪制順序,返回當(dāng)前下標(biāo)。
定義了的話,通過(guò)getChildDrawingOrder獲取View的下標(biāo),需要重寫(xiě)這個(gè)方法。
所以一般返回i。
在view列表中拿出view,否則在children中拿出。
查看全部 -
*** 看庫(kù)或框架的源碼時(shí),需要的是捋清楚代碼的思路,理解核心思想,而不是明白其中每一行代碼的實(shí)現(xiàn)。
接下來(lái)判斷onInterceptTouchEvent方法的值
發(fā)現(xiàn)一般情況下這個(gè)方法都會(huì)返回false,因?yàn)辄c(diǎn)擊來(lái)源!=鼠標(biāo)等等。
查看全部 -
第一個(gè)判斷:這個(gè)值在View中可以找到,是個(gè)檢測(cè)用的對(duì)象
第二個(gè)判斷:提供的輔助功能的選項(xiàng),幫助有障礙的用戶的使用,不影響方法調(diào)用
接下來(lái)正式進(jìn)入事件分發(fā)的邏輯代碼中
判斷安全策略,
查看全部 -
* dispatchTouchEvent? 標(biāo)志著事件進(jìn)入到了ViewGroup里面。首先被調(diào)用到。
* onInterceptTouchEvent? 在過(guò)程中被調(diào)用。true=當(dāng)前ViewGroup消費(fèi)掉。false=傳遞下去。
* onTouchEvent? ViewGroup沒(méi)有onTouchEvent方法的實(shí)現(xiàn),他是在View中實(shí)現(xiàn)的。
應(yīng)用場(chǎng)景:希望事件進(jìn)行到ViewGroup終止,不傳輸?shù)阶覸iew中,用戶的觸摸事件自行處理。
處理:重寫(xiě)onInterceptTouchEvent并返回true,同時(shí)重寫(xiě)onTouchEvent方法,在其中編寫(xiě)事件處理邏輯即可。
查看全部 -
事件未被消費(fèi),當(dāng)前視圖都沒(méi)能處理掉這個(gè)事件,才會(huì)去調(diào)用Activity的onTouchEvent方法,且他的返回值作為dispathchEvent的返回值。
查看Activity中onTouchEvent方法的實(shí)現(xiàn)邏輯,發(fā)現(xiàn)其中一個(gè)的判斷邏輯很重要,如果返回為true則會(huì)關(guān)閉當(dāng)前界面且返回true。
查看Window中shouldCloseOnTouch方法,當(dāng)這三個(gè)bolean值均為true時(shí)返回true。
* mCloseOnTouchOutside=true這個(gè)值表示當(dāng)前Activity支持點(diǎn)擊空白區(qū)域讓acitvity消失。這個(gè)變量一般在downLoad的時(shí)候這個(gè)值才為true。
* peekDecorView的實(shí)現(xiàn)在PhoneWindow,返回的是當(dāng)前的dectorView。
* isOutside =true 表示當(dāng)前觸摸的點(diǎn)擊事件是在頂層View DoctorView之外的,沒(méi)有點(diǎn)擊到DoctorView里面。
Activity整體傳遞流程比較線性,如果還是不清楚可以再回看源碼及流程圖消化吸收。
查看全部 -
查看源碼,dispatchTouchEvent方法時(shí)發(fā)現(xiàn):
1、當(dāng)action是按下的時(shí)候(也就是當(dāng)事件剛開(kāi)始的時(shí)候)會(huì)調(diào)用onUserInteraction方法,而內(nèi)部并無(wú)具體實(shí)現(xiàn)——所以在事件剛開(kāi)始時(shí)可以實(shí)現(xiàn)這個(gè)方法用于監(jiān)聽(tīng)事件開(kāi)始。
2、當(dāng)獲取上層view的superDispatchTouchEvent方法返回是true的時(shí)候就消費(fèi)掉這個(gè)事件,否則就傳給onTouchEvent處理。(符合上一節(jié)說(shuō)的流程)
3、 Activity+Window+DecorView之間的關(guān)系:每個(gè)Activity都持有一個(gè)window對(duì)象,window本身是一個(gè)抽象類(lèi),有一個(gè)唯一的實(shí)現(xiàn)PhoneWindow,PhoneWindow持有了一個(gè)DecorView的實(shí)例,DecorView是Activity最頂層的View,他繼承自FrameLayout。
4、FrameLayout繼承自ViewGroup,F(xiàn)rameLayout要實(shí)現(xiàn)的superDispatchTouchEvent方法在VIewGroup中實(shí)現(xiàn)了。
查看全部 -
Activity中涉及到了兩個(gè)方法,返回值均為true/false,根據(jù)父類(lèi)dispathTouchEvent的返回走哪個(gè)方法。
dispatchTouchEvent返回true,事件被消費(fèi),事件結(jié)束。
onTouchEvent無(wú)論返回true/false,事件都結(jié)束。
查看全部 -
事件產(chǎn)生的時(shí)候會(huì)有這些類(lèi)型,可以想象下手指在屏幕中的活動(dòng)
按下-移動(dòng)-抬起,存在這樣一個(gè)固定的規(guī)律,移動(dòng)可以不存在
安卓中存在的這樣一個(gè)基本的層級(jí)關(guān)系和傳遞層級(jí)
查看全部 -
事件分發(fā)的定義和由來(lái),及他的出現(xiàn)的機(jī)制的統(tǒng)籌定義
查看全部 -
事件分發(fā)流程
查看全部 -
事件在Activity的分發(fā)
查看全部 -
系統(tǒng)把事件封裝為MotionEvent對(duì)象,事件分發(fā)的過(guò)程就是MotionEvent分發(fā)的過(guò)程。
事件序列:從手指按下屏幕開(kāi)始,到手指離開(kāi)屏幕所產(chǎn)生的一系列事件。
查看全部 -
系統(tǒng)把事件封裝為MotionEvent對(duì)象,事件分發(fā)的過(guò)程就是MotionEvent分發(fā)的過(guò)程。
事件序列:從手指按下屏幕開(kāi)始,到手指離開(kāi)屏幕所產(chǎn)生的一系列事件。
查看全部 -
事件分發(fā):用戶通過(guò)屏幕與手機(jī)交互,每一次點(diǎn)擊、長(zhǎng)按、移動(dòng)等都是一個(gè)事件
事件分發(fā)機(jī)制:某一個(gè)事件從屏幕傳遞各個(gè)View,由View來(lái)使用這一事件(消費(fèi)事件)或者忽略這一事件(不消費(fèi)事件),這整個(gè)過(guò)程的控制。
查看全部 -
Activity的事件分發(fā)流程圖。
dispatchtouchEvent(MotionEvent ev) 和 onTouchEvent(MotionEvent ev) 流程圖
事件什么情況下被消費(fèi),什么情況下被傳遞
?
查看全部
舉報(bào)