通俗易懂說Android view事件傳遞機制

事件傳遞簡介

一句話說Android事件傳遞機制

  • Android中view的事件傳遞是從外到內然後再從內到外傳遞的,如果中間有view消費了事件,則終止事件傳遞。

從外到內?

  • 從外到內說的是事件傳遞的是從最外層的view(事件是ViewGroup)一層層向其內部childView傳遞的。

從內到外?

  • 同樣的從內到外說的是事件傳遞的是從最內層的view一層層向其外部parent View傳遞的。

view事件消費?

  • view事件消費,一般是指當前view處理了當前事件,一般爲當前view的onTouchEvent返回true。

具體的事件傳遞說明

  • Android中view的事件傳遞分爲view的直接子類和ViewGroup的直接子類兩種不情況,其中兩種相同的地方都會涉及到onTouchEvent()和dispatchTouchEvent(),而viewGroup還涉及到一個方法onIntercpetTouchEvent()。由於view的事件傳遞相對簡單,並且ViewGroup的事件傳遞還會涉及到View中的事件傳遞流程(ViewGroup是View的子類,繼承了View的特性),所以我們先說說View中事件的傳遞流程。

View中事件傳遞流程

  • 當事件從外層ViewGroup傳遞到View中時,首先調用的是View的dispatchTouchEvent方法,然後再調用View的onTouchEvent(),如果onTouchEvent()方法返回true,則表示當前View會消費該事件,事件傳遞終止。如果返回false,則會回到當前View的parent View中並調用它的onTouchEvent(),如果onTouchEvent()返回true,則表示當前ViewGroup消費事件,終止事件傳遞,否則繼續向外傳遞,直到傳遞到ActivityonTouchEvent()。如下圖所示:view中的事件傳遞流程

View Group中的事件傳遞流程

  • 當事件傳遞到ViewGroup時,首先調用dispatchTouchEvent(),在ViewGroup的dispatchTouchEvent()方法中首先會調用onIntercepteTouchEvent()判斷是否需要攔截當前事件,返回true表示當前ViewGroup攔截當前事件,不在向下傳遞,並調用onTouchEvent()方法,如果onTouchEvent()返回true表示當前ViewGroup消費當前事件,終止事件傳遞,如果onTouchEvent()返回false時,則調用當前ViewGroup的parent View的onTouchEvent()方法,同理如果當前ViewGroup的parent View的onTouchEvent()方法放回true,則表示該view消費當前事件,並且終止事件傳遞,反之如果當前ViewGroup的parent View的onTouchEvent()方法放回false,則繼續向上傳遞事件。如下圖所示:
    viewgroup事件傳遞流程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章