最近一直在學習Android里面的事件分派機制,感覺很奇妙,看了很多博客和分析,才在腦子里形成了一個模糊的概念,對事件分派有了一定的認識。
於是,我畫了一個圖來簡單明了的表述Android中事件的分派機制:
看了這個圖,說起來就簡單了。
假設一個視圖結構如左上角所示,最外面的父控件是一個ViewGroup A,內一層是ViewGroup B,最最里面的控件是View C。
當用戶去點擊View C的時候,最先觸發的是ViewGroup A的onInterceptTouchEvent()方法。這個方法是用來阻斷事件的。
如果返回false(默認返回false),事件就會繼續向內層傳遞。
內層如果是ViewGroup的話,事件就先傳遞到ViewGroup的onInterceptTouchEvent()方法上,作用也是一樣的,用來阻斷事件。
內層如果是View的話,就直接傳遞到View的onTouchEvent()上面了
如果返回true,就不向內層傳遞了,就把事件發給自己的onTouchEvent()方法。
當事件傳遞到onTouchEvent()方法的時候,這個方法主要用來處理事件。
如果返回true,就代表自己來處理這個事件,那么事件就不會繼續向下傳遞了。事件被消費了。
如果返回false的話,就會向上一層父控件傳遞。
突然發現就是這么回事,一開始看別人的文章也看了好久沒看明白。
了解事件分派機制是比較有用的,比如,下拉刷新,當前顯示了一個ListView展示數據,假設當前ListView是顯示最頂部的內容,用戶手向上滑動的時候,操控的是ListView,用戶手向下滑動的時候就要把上面隱藏的視圖拉出來,這個時候操控的就是整個ViewGroup。大概就是這么個意思吧……下拉刷新我還沒自己實現出來。T.T
轉載請注明出處,哈哈哈哈:http://www.cnblogs.com/kross/p/3467285.html