Android事件分發詳解二(ViewGroup)

Android事件分發詳解二(ViewGroup)

一、概述:

1.ViewGroup是繼承View的子類,它的事件分發和View基本上差不多,不一的是多一個onInterceptTouchEvent()方法。

2.onInterceptTouchEvent()主要起到攔截作用,如果返回true則攔截事件,不向child view 分發事件,走自己的流程,反之返回false則不攔截事件,分發給child view.

二、解析源碼:

1.找到dispatchTouchEvent()方法

如圖源碼,在ACTION_DOWN調用瞭onInterceptTouchEvent();

這裡寫圖片描述

註意隻有ACTION_DOWN時onInterceptTouchEvent()方法返回false時ACTION_MOVE、ACTION_UP都會調用,如果返回ACTION_DOWN時返回true則ACTION_MOVE、ACTION_UP都會調用onInterceptTouchEvent()。

2.接下來onInterceptTouchEvent()返回true,是怎麼攔截的呢?

如下圖,源碼中if語句對onInterceptTouchEvent的返回值intercepted進行瞭判斷,如果false不攔截分發事件。

1-1

3.返回false後調用dispatchTransformedTouchEvent()方法進行調用child view

這裡寫圖片描述

4.dispatchTransformedTouchEvent()方法會先判斷有無child view 沒有則調用父類View的dispatchTouchEvent(),反之調用child.dispatchTouchEvent();

這裡寫圖片描述

三、總結

先ViewGroup再分發到View

這裡寫圖片描述

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *