Android事件分發機制,通俗易懂的讓你想點贊。

最近已經在開始準備面試了。複習了不少。把溫故而知新的知識點,用最簡白的白話文表達出來。一呢、是記錄下。二呢、萬一能幫助你們的話,更好java

1、事件分發的3個重要方法

首先我隨便建了一個ViewGroup,3個重要方法是面試

  • dispatchTouchEvent
  • onInterceptTouchEvent
  • onTouchEvent
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

2、放大招,分析事件分發流程。

圖中:

  • super:調用父類方法
  • true:消費事件,即事件不繼續往下傳遞
  • false:不消費事件,事件也不繼續往下傳遞 / 交由父控件onTouchEvent()處理

看着上面的圖和分析以下。總共分3個步驟:code


步驟1(在Activity裏):

事件首先在Activity裏的dispatchTouchEvent()
返回值:
true / false -------> 消費事件(這裏false也是消費事件)
super -------------> 事件下發到ViewGroup,調用ViewGroup的dispatchTouchEvent()cdn


步驟2(在ViewGroup裏)

事件在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


步驟3(在子View裏)

事件在View裏的dispatchTouchEvent() 返回值:
true --------------> 消費事件
false -------------> 不消費事件,也不下發,交給父控件的onTouchEvent()處理
super -------------> 事件下發到當前View的onTouchEvent()
io

事件在View裏的onTouchEvent() 返回值:
true --------------> 消費事件
false / super -----> 不消費事件,也不下發,交給父控件的onTouchEvent()處理


看完這些分析,隨口就能來事件分發機制了!!3個步驟概況。有沒有激動的讓你點贊呢

相關文章
相關標籤/搜索