歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android View事件傳遞

Android View事件傳遞

日期:2017/3/1 9:25:40   编辑:Linux編程

在Android中,人們主要通過手指與系統交互。Android把所有的touch事件都被封裝成MotionEvent來進行處理,其中包括了手指點擊的位置,時間等信息。其事件類型主要包括:ACTION_DOWN,ACTION_UP,ACTION_MOVE, ACTION_POINTER_DOWN, ACTION_POINTER_UP,ACTION_CANCEL。

這些事件是有觸發順序的,下面舉兩個栗子:

只有一個手指點擊在view范圍內,依次觸發的事件:手指按下ACTION_DOWN→手指移動ACTION_MOVE→手指抬起ACTION_UP

多個手指點擊在view范圍內,依次觸發的事件:第一根手指按下ACTION_DOWN→隨後的手指按下ACTION_POINTER_DOWN→有手指抬起ACTION_POINTER_UP→最後一根手指抬起ACTION_UP。

為了處理這些事件,Android定義了三種方法:

dispatchTouchEvent()函數:負責分發傳遞事件。

onInterceptTouchEvent()函數:負責攔截事件

onTouchEvent()函數和 OnTouchListener監聽:負責消費和處理事件

事件傳遞流程

當一個事件被觸發,事件的傳遞從Activity.dispatchTouchEvent()開始,一直從最外層的父view開始向裡面的子view傳遞,直到被攔截。在傳遞過程中,view可以通過onInterceptTouchEvent()函數進行攔截,一旦父view攔截了該事件,則不再向下傳遞。

如果被觸發的事件被傳遞至最內層的view,一直未被攔截消費,則會反向向外傳遞,這時候父view可以通過onTouchEvent函數對事件進行消費,直到activity。另外,如果被觸發的ACTION_DOWN事件在某一層未被消費,那麼接下來的事件是無法被傳遞進來的。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved