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