最近已經在開始準備面試了。複習了不少。把溫故而知新的知識點,用最簡白的白話文表達出來。一呢、是記錄下。二呢、萬一能幫助你們的話,更好java
首先我隨便建了一個ViewGroup,3個重要方法是面試
public class MyViewGroup extends ViewGroup {
//...省略部分代碼
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
}
複製代碼
而後對這個3個方法作下簡單的描述ide
方法 | 做用 | 調用時刻 |
---|---|---|
dispathTouchEvent() | 分發(傳遞)點擊事件 | 當點擊事件可以傳遞給當前View時,該方法就會被調用 |
onInterceptTouchEvent() | 判斷是否攔截了某事件(只存在於ViewGroup,普通View沒有這個方法) | 在dispathTouchEvent()內部調用 |
onTouchEvent() | 處理點擊事件 | 在dispathTouchEvent()內部調用 |
事件分發順序是 Activity(Window) --> ViewGroup --> View
spa
看着上面的圖和分析以下。總共分3個步驟:code
事件首先在Activity裏的dispatchTouchEvent()
返回值:
true / false -------> 消費事件(這裏false也是消費事件)
super -------------> 事件下發到ViewGroup,調用ViewGroup的dispatchTouchEvent()cdn
事件在ViewGroup裏的dispatchTouchEvent()
返回值:
true --------------> 消費事件
false -------------> 不消費事件,也不下發,交給父控件的onTouchEvent()處理
super -------------> 事件下發到當前ViewGroup的onInterceptTouchEvent()
blog
事件在ViewGroup裏的onInterceptTouchEvent()
返回值:
true --------------> 事件下發到當前ViewGroup的onTouchEvent()
false / super -----> 事件下發到子View,調用子View的dispatchTouchEvent()
事件
事件在ViewGroup裏的onTouchEvent() 返回值:
true --------------> 消費事件
false / super -----> 不消費事件,也不下發,交給父控件的onTouchEvent()處理it
事件在View裏的dispatchTouchEvent() 返回值:
true --------------> 消費事件
false -------------> 不消費事件,也不下發,交給父控件的onTouchEvent()處理
super -------------> 事件下發到當前View的onTouchEvent()
io
事件在View裏的onTouchEvent() 返回值:
true --------------> 消費事件
false / super -----> 不消費事件,也不下發,交給父控件的onTouchEvent()處理