歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 深入研究Android事件傳遞與重繪

深入研究Android事件傳遞與重繪

日期:2017/3/1 10:23:42   编辑:Linux編程

Android事件傳遞

這裡主要討論的是Android的ViewGroup的onInterceptTouchEvent和onTouchEvent兩個事件的傳遞規則以及應對措施。

onInterceptTouchEvent:ViewGroup類所特有的事件,作用是攔截所有的Touch事件,無論是DOWN、MOVE、UP。

onTouchEvent:View類所特有的事件,作用是對所有的Touch事件進行處理。

我們都知道ViewGroup繼承至View,所以ViewGroup類也擁有onTouchEvent方法。

下面我們來看一下onInterceptTouchEvent和onTouchEvent的觸發規則。

首先,只有ViewGroup才擁有onInterceptTouchEvent,因為onInterceptTouchEvent的作用攔截ViewGroup本身和其子元素的Touch事件,而View類沒有子元素,所以也就沒有onInterceptTouchEvent這個方法了。

onInterceptTouchEvent是在onTouchEvent之前被調用,onInterceptTouchEvent會決定是否調用onTouchEvent方法。

當Touch(觸摸)事件發生時,會首先調用VewGroup的onInterceptTouchEvent方法,如果onInterceptTouchEvent方法返回false,那麼就不會再去調用當前ViewGroup的onTouchEvent方法,而是去檢查其子元素,如果在ViewGroup當前Touch區域有相應子元素,則會去調用子元素的onInterceptTouchEvent方法,如果子元素是一個View,則調用子元素的onTouchEvent方法。

當經過這一圈之後,如果最終的子元素的onInterceptTouchEvent或者onTouchEvent返回了false,那麼整個事件將回到最頂級的ViewGroup,並且調用最頂級的ViewGroup的onTouchEvent方法。但這樣要注意,這個返回的過程也是一級一級的,比如當最底層的View的onTouchEvent返回false了,程序則會向上一級,去判斷子ViewGroup的onTouchEvent方法是否返回true,如果是true,那麼則程序的下一次事件將會從子ViewGroup的onTouchEvent開始,反之onTouchEvent如果返回false,那麼則繼續往上判斷,最終,達到最頂級的ViewGroup這一層,無論其onTouchEvent是否返回false,都會進行調用。

Copyright © Linux教程網 All Rights Reserved