Android Touch事件處理機制

來源:互聯網
上載者:User

 當TouchEvent發生時,首先Activity將TouchEvent傳遞給最頂層的View, TouchEvent最先到達最頂層 view 的 dispatchTouchEvent ,然後由  dispatchTouchEvent 方法進行分發,如果dispatchTouchEvent返回true ,則交給這個view的onTouchEvent處理,如果dispatchTouchEvent返回 false ,則交給這個 view 的 interceptTouchEvent 方法來決定是否要攔截這個事件,如果 interceptTouchEvent 返回 true ,也就是攔截掉了,則交給它的 onTouchEvent 來處理,如果 interceptTouchEvent 返回 false ,那麼就傳遞給子 view ,由子 view 的 dispatchTouchEvent 再來開始這個事件的分發。如果事件傳遞到某一層的子 view 的 onTouchEvent 上了,這個方法返回了 false ,那麼這個事件會從這個 view 往上傳遞,都是 onTouchEvent 來接收。而如果傳遞到最上面的 onTouchEvent 也返回 false 的話,這個事件就會“消失”,而且接收不到下一次事件。


onTouch方法: 是View的onTouchListener介面中定義的方法,當View綁定了onTouchListener後,當有touch事件觸發時,就會調用onTouch方法。

onTouchEvent方法: 是重寫了Activity中的方法。


Android的Touch事件處理分3個層面:Activity層,ViewGroup層,View層
Touch事件處理的幾條基本原則:
1.如果在某個層級沒有處理ACTION_DOWN,那麼該層就再也收不到後續的Touch事件了,直到下ACTION_DOWN事件
  說明:
    a.某個層級沒有處理某個事件指的是它以及它的子View都沒有處理該事件
    b.這條規則不適用於Activity層(它是頂層),他們可以收到每一個Touch事件。
    c.沒有處理ACTION_MOVE這類事件,不會有任何影響
2.如果ACTION_DOWN事件發生在某個View的範圍之內,則後續的ACTION_MOVE,ACTION_UP和ACTION_CANCEL等事件都將發往該View,即使事件已經出界了
3.第一根按下的手指觸發ACTION_DOWN事件,之後按下的手指觸發ACTION_POINTER_DOWN事件,中間起來的手指觸發ACTION_POINTER_UP事件,最後起來的手指觸發ACTION_UP事件(即使它不是觸發ACTION_DOWN事件的那根手指)。
4.pointer id可以跟蹤手指,從按下的那個時刻起pointer id生效,直至起來的那一刻失效,這之間維持不變。
5.如果一個ACTION_DOWN事件被付View攔截了,則任何子View不會再收到任何Touch事件了(這符合第一點要求)
6.如果一個非ACTION_DOWN事件被父Vew攔截了,則那些上次處理了ACTION_DOWN事件的子View會收到一個ACTION_CANCEL事件,之後不會再收到任何Touch事件了,即使父View不再攔截後續的Touch事件。
7.如果父View決定處理Touch事件或者子View沒有處理Touch事件,則父View按照普通View的處理方式處理Touch事件,否則它根本不處理Touch事件(它只負責分發)
8.如果父View在onInterceptTouchEvent中攔截事件,則onInterceptTouchEvent中不會再收到Touch事件了,事件被直接交給它自己處理

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.