Android MotionEvent 事件解讀


Android在MotionEvent里定義了一系列的手勢事件

 

其中包括:

MotionEvent.ACTION_DOWN:當屏幕檢測到第一個觸點按下之后就會觸發到這個事件。

MotionEvent.ACTION_MOVE:當觸點在屏幕上移動時觸發,觸點在屏幕上停留也是會觸發的,主要是由於它的靈敏度很高,而我們的手指又不可能完全靜止(即使我們感覺不到移動,但其實我們的手指也在不停地抖動)。

MotionEvent.ACTION_POINTER_DOWN:當屏幕上已經有觸點處於按下的狀態的時候,再有新的觸點被按下時觸發。

MotionEvent.ACTION_POINTER_UP:當屏幕上有多個點被按住,松開其中一個點時觸發(即非最后一個點被放開時)觸發。

MotionEvent.ACTION_UP:當最后一個觸點松開時被觸發。

MotionEvent.ACTION_SCROLL:非觸摸滾動,主要是由鼠標、滾輪、軌跡球觸發。

MotionEvent.ACTION_CANCEL:不是由用戶直接觸發,有系統再需要的時候觸發,例如當父view通過使函數onInterceptTouchEvent()返回true,從子view拿回處理事件的控制權是,就會給子view發一個ACTION_CANCEL事件,這里了view就再也不會收到事件了。可以將其視為ACTION_UP事件對待。

 

onInterceptTouchEvent()函數與onTouchEvent()的區別:


1、onInterceptTouchEvent()是用於處理事件(類似於預處理,當然也可以不處理)並改變事件的傳遞方向,也就是決定是否允許Touch事件繼續向下(子view)傳遞,一但返回True(代表事件在當前的viewGroup中會被處理),則向下傳遞之路被截斷(所有子view將沒有機會參與Touch事件),同時把事件傳遞給當前的view的onTouchEvent()處理;返回false,則把事件交給子view的onInterceptTouchEvent()


2、onTouchEvent()用於處理事件,返回值決定當前view是否消費(consume)了這個事件,也就是說在當前view在處理完Touch事件后,是否還允許Touch事件繼續向上(父view)傳遞,一但返回True,則父view不用操心自己來處理Touch事件。返回true,則向上傳遞給父view(注:可能你會覺得是否消費了有關系嗎,反正我已經針對事件編寫了處理代碼?答案是有區別!比如ACTION_MOVE或者ACTION_UP發生的前提是一定曾經發生了ACTION_DOWN,如果你沒有消費ACTION_DOWN,那么系統會認為ACTION_DOWN沒有發生過,所以ACTION_MOVE或者ACTION_UP就不能被捕獲。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM