android事件分發機制

來源:互聯網
上載者:User

標籤:

      所有的點擊事件必然是以MotionEvent.ACTION_DOWN事件開始,以MotionEvent.ACTION_UP結束,中間可能會伴隨著MotionEvent.ACTION_MOVE或者其他事件,當使用者點擊螢幕的時候,會首先觸發MotionEvent.ACTION_DOWN事件,

     點解事件率先被Activity內部的dispatchTouchEvent()方法捕獲到,如果我們在複寫某個Activity的dispatchTouchEvent()方法的時候如果直接返回true或者false,而沒有調用super.dispatchTouchEvent()方法,就不會促使事件向位於Activity布局中的頂層視圖傳遞,也就是說步驟①以及之後的ViewGroup和ViewGroup內部的View均不會執行方法,也不會調用Activity中的onTouchEvent()方法.

     在某個Activity的dispatchTouchEvent()方法中調用super.dispatchTouchEvent()方法的前提下,如果我們在activity的布局ViewGroup的dispatchTouchEvent()直接返回true,就表示該事件被當前的ViewGroup的dispatchTouchEvent()方法中消費掉了,而不會將該事件繼續傳給該ViewGroup的onInterceptTouchEvent()和onTouchEvent(),因為事件在該ViewGroup中被消費,那麼就不會將同類事件繼續想上也就是ViewGroup的父ViewGroup以及Activity的onTouchEvent()方法。假如消費了MotionEvent.ACTION_DOWN,如果所有的上層ViewGroup都沒有攔截,則後續的MotionEvent.ACTION_UP也會傳遞到該ViewGroup的dispatchTouchEvent()中。如果直接返回false,則表示沒有消費,事件會沿著上一級,上上級ViewGroup的onTouchEvent()傳遞,如果始終沒有消費,最終會回到Activity的onTouchEvent()方法中, 則之後的MotionEvent.ACTION_DOWN直接由Activity的dispatchTouchEvent()傳遞給onTouchEvent(),而不會布局ViewGroup及所有的子視圖傳遞。如果當前的ViewGroup的調用 super.dispatchTouchEvent();胡巴該事件傳遞給該ViewGroup的onInterceptTouchEvent()

   onInterceptTouchEvent()表示是否攔截當前事件是否想下一級的子View或者ViewGroup傳遞,如果如果直接返回true,表示事件直接向ViewGroup的onTouchEvent()傳遞,返回false則傳遞給下一級View或者ViewGroup的dispatchTouchEvent().如果直接傳遞給了當前View的onTouchEvent(),如果onTouchEvent()消費了該事件即傳回值為true,後續的MotionEvent.ACTION_UP如果未被攔截也會傳遞到該ViewGroup的onTouchEvent()中。如果調用的是super.onInterceptTouchEvent(),則取決於繼承的父類該方法的處理邏輯。

   最底層的View如果是繼承自View或者不帶有子View的直接或者間接子類,沒有onInterceptTouchEvent()方法,但dispatchTouchEvent()和onTouchEvent()的處理邏輯與中間的ViewGroup類似。

android事件分發機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.