-
事件序列。查看全部
-
事件的類型。
查看全部 -
viewgroup事件處理
查看全部 -
事件分發(fā)的對象:MotionEvent。
查看全部 -
事件傳遞過程.
查看全部 -
PhoneWindow{
????
//?This?is?the?top-level?view?of?the?window,?containing?the?window?decor. private?DecorView?mDecor;
}
查看全部 -
事件通過Acticity的DispatchTocuhEvent走到DecorView的superDispatchTouchEvent,再走到ViewGroup再到View
查看全部 -
傳遞順序:activiyt window decorView viewGroup view
查看全部 -
Activity事件分發(fā)流程
查看全部 -
傳遞層級,最終傳到View,按子類繼承順序分發(fā)
首先在Activity上,傳遞給其所持有的Window,然后給window所持有的DecorView,接著按父子繼承關(guān)系,依次傳遞給ViewGroup和View
查看全部 -
ViewGroup時(shí)間分發(fā)
查看全部 -
每個(gè)Activity持有Window窗體,而Window是個(gè)抽象類,其唯一的實(shí)現(xiàn)類是PhoneWindow,所以Window的
superDispatchTouchEvent
方法就是調(diào)用PhoneWindow的DispatcherToucherEvent方法,,實(shí)現(xiàn)的調(diào)用DecorView的 SuperDispatcherToucherEvent方法(PhoneWindow持有DecorView)。DecorView繼承自FrameLayout(內(nèi)部沒有實(shí)現(xiàn)SuperDispatcherToucherEvent方法),F(xiàn)rameLayout繼承自ViewGroup(實(shí)現(xiàn)SuperDispatcherToucherEvent方法)。
public?boolean?superDispatchTouchEvent(MotionEvent?event)?{ ????return?mDecor.superDispatchTouchEvent(event); }
,
查看全部 -
ViewGroup:dispatchTouchEvent主要做了3件事
1、去判斷是否需要攔截事件
2、在當(dāng)前ViewGroup中找到用戶真正點(diǎn)擊的View
3、分發(fā)事件到View上
查看全部 -
onInterceptTouchEvent方法會(huì)在事件分發(fā)的過程中調(diào)用,如果返回true,說明當(dāng)前的ViewGroup會(huì)攔截這個(gè)事件,事件不會(huì)再往子View傳遞;返回false,當(dāng)前的ViewGroup不會(huì)攔截這個(gè)事件,事件繼續(xù)向子View傳遞。
ViewGroup是沒有onTouchEvent方法的實(shí)現(xiàn)的,它是在父類View中實(shí)現(xiàn)。如果想讓事件終止,不讓事件傳遞到子View中,并且用戶的觸摸事件,我們會(huì)自己進(jìn)行處理,可以重寫onInterceptTouchEvent,讓它返回true,同時(shí)為了處理用戶的觸摸事件,我們可以重寫onTouchEvent方法,在其中編寫一些事件的處理邏輯。
查看全部 -
Activity的事件分發(fā)流程圖
查看全部
舉報(bào)