Android學習筆記之dispatchTouchEvent和OnInterceptTouchEvent和OnTouchEvent三個方法之間的聯繫...

PS:很久沒有寫博客了,項目正式開始啓動了,可是怎麼也打不起精神來...可能仍是不適應放假留校...這下一年只能回家一次了...傷感...寫篇博客舒坦下...java

 

學習內容:android

  Android中dispatchTouchEvent和OnInterceptTouchEvent和OnTouchEvent三個方法之間的聯繫...這三個方法研究了整整一個下午,也沒有理解的特別的好...說實話,java的源代碼我始終都沒有看懂到底是怎麼個調用過程...不過仍是把本身理解的結果寫一下把...
函數

  這三個方法是相互關聯的,表示的是Android中觸摸事件的分發過程...這個觸摸事件通常設計到三個過程,DOWN按下操做,MOVE移動操做,UP擡起操做,有的時候MOVE操做能夠沒有...首先咱們須要理解一個很是重要的問題就是Android如何對觸摸事件進行捕獲,分發,和響應的過程,沒有了這個過程咱們徹底不知道這三個事件是怎麼一回事...我簡單的先放上一張圖片..學習

  這張圖片反映了完整的觸摸事件發生,分發,以及響應的一個過程...我簡單的闡述這個過程的實現:當咱們按下屏幕出發ACTION_DOWN操做的時候,那麼dispatchTouchEvent()方法就被啓動了,這個方法經過調用OnInterceptTouchEvent來判斷,本層的View是否進行攔截...若是進行攔截,那麼這個ACTION_DOWN操做的響應只會在本層的View中進行響應..而後對ACTION_DOWN進行消費...若是ACTION_DOWN操做被消費,那麼本層的View還會去響應ACTION_MOVE和ACTION_UP操做...若是沒有進行消費,那麼就會返回信息,而且不會執行ACTION_MOVE和ACTION_UP操做...估計你們看到這裏的時候就會認爲(這樓主寫的什麼玩意...)...其實我剛看的時候也是這樣...
spa

  咱們拿一個實例來看...不上什麼代碼...這裏上代碼也很差理解...咱們就拿咱們手機裏的滑屏幕操做來講...滑屏操做最熟悉不過了,可是咱們你們每每沒有注意到,咱們的手機桌面上有不少應用圖標...咱們在短期按住桌面圖標而後滑動屏幕這個操做咱們也能實現,只要不是長時間按着就能夠實現屏幕滑動的效果,並無因爲桌面上的圖標而受到影響..其實這個例子咱們就很好理解了...在這裏把事情交代清楚...(ACTION_DOWN:手按下屏幕...觸發dispatchTouchEvent) ,(最外層的ViewGroup:主屏幕),(下一層ViewGroup:桌面圖標)...而後咱們的主屏幕調用OnInterceptTouchEvent()函數進行攔截...這裏必需要攔截,只有主屏幕進行攔截操做,這樣下一層的ViewGroup,也就是桌面圖標纔不會去對ACTION_DOWN進行響應操做...也就是說,經過攔截後,主屏幕ViewGroup層調用OnTouchEvent進行響應...這樣下一層的ViewGroup,也就是桌面圖標層就不會有響應操做...我再放兩張圖...設計

 

  結合這兩張圖,你們再理解一下,總結一下,只要某一層產生了攔截,那麼ACTION_DOWN操做就不會再向子ViewGroup進行傳遞了...可是響應OnTouchEvent(),也就是這個方法,不必定在本層的ViewGroup進行響應...由於TouchEvent能夠向上傳遞...再上一張圖片...
blog

  上面的圖片就是緣由,由於只有當本層的ViewGroup對ACTION_DOWN進行消費以後纔不會向上進行傳遞,而且當被消費以後,纔會去響應ACTION_MOVE和ACTION_UP操做...
事件

總之:圖片

  android中的Touch事件都是從ACTION_DOWN開始的:博客

  單手指操做:ACTION_DOWN---ACTION_MOVE----ACTION_UP

  多手指操做:ACTION_DOWN---ACTION_POINTER_DOWN---ACTION_MOVE--ACTION_POINTER_UP---ACTION_UP.

相關文章
相關標籤/搜索