編輯:關於android開發
點擊事件的事件分發就是對MotionEvent事件的分發過程,當一個MotionEvent產生了以後,系統需要把這個事件傳遞給一個具體的View,而這個傳遞的過程就是分發的過程。
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean consume = false;
if(onInterceptTouchEvent(ev)) {
consume = onTouchEvent(ev);
} else {
consume = child.dispatchTouchEvent(ev);
}
return consume;
}
上面的偽代碼很好的描述了三者之間的關系。如果當前View攔截事件,就交給自己的onTouchEvent去處理,否則就傳給子View,直到事件被最終處理。
當一個點擊事件產生後,它的傳遞過程如下:Activity -> Window -> View。如果View的onTouchEvent返回false,那麼它的父容器onTouchEvent將會被調用,以此類推,最終將由Activity的onTouchEvent處理。
Activity -> Window -> DecorView。
Windows是一個抽象類,可以控制頂級View的外觀和行為策略,PhoneWindow是這個類的唯一個實現。
DecorView就是當前界面的底層容器,即setContentView所設置的View是它的一個子View。
ViewGroup -> dispatchTouchEvent -> onInterceptTouchEvent -> onTouch or onTouchEvent
頂級View一般都是一個ViewGroup。攔截事件之後,如果ViewGroup設置了mOnTouchListener,則Listener裡的onTouch方法會屏蔽掉onTouchEvent。如果onTouchEvent設置了mOnClickListener,則Listener裡的onClick會被調用。如果ViewGroup沒有攔截則傳給子View直到整個事件分發完成。
如果View設置了mOnTouchListener,則Listener裡的onTouch方法會屏蔽掉onTouchEvent。如果onTouchEvent設置了mOnClickListener,則Listener裡的onClick會被調用。
View沒有onInterceptTouchEvent方法,一旦有點擊事件傳遞給他,他就會處理。
注:上面只是描述了事件分發過程的原理,關於源碼的分析請參考書本的相應章節。
AlertDialog創建6種對話框的用法 AlertDialog生成的對話框可分為4個區域:圖標區,標題區,內容區,按鈕區 結構如圖: AlertDialog對話
onTouchEvent,ontouchevent使用新建MyView類 package onTouchEvent; import android.content.C
Adapter模式實戰-重構鴻洋的Android建行圓形菜單 對於很多開發人員來說,炫酷的UI效果是最吸引他們注意力的,很多人也因為這些炫酷的效果而去學習一些比較知名
安卓開發學習經歷2--《第一行代碼》coolweather項目SQL語句同一個“陷阱”掉兩次 注意轉義字符等特殊字符正確書寫 關於Id字段自增加體會,coolweath