android事件分發,攔截,處理

來源:互聯網
上載者:User

標籤:

事件分發
  • android事件處理的時候 會根據事件發生的座標,從父容器一直慢慢的發送到相關的所有的view
  • 因此當都不處理的時候 事件傳遞的流程圖


dispatchTouchEvent返回true
  • 但是如果我們在A的dispatchTouchEvent 中返回true,那麼也就是事件不進行分發

  • 發現只是調用了ViewGroupA事件的攔截方法,也就是沒有將事件進行分發,連自己的onTouchEvent事件都沒有進行處理
  • 如果讓ViewGroupB的dispatchEvent返回true呢?

  • 當我們的view的dispatchTouchEvent返回true呢?現在我們可以推測了AdispatchTouchEvnet–>AonInterceptTouchEvent–>BdispatchTouchEvent–>BonInterceptTouchEvent–>CdispatchTouchEvent

onIntercaptTouchEvent返回true
  • 當我們的ViewGroupA的onInterceptTouchEvent返回true的時候,也就是我們的ViewGroupA決定進行事件攔截
  • 正如我們知道的,當對事件攔截之後直接進入自己view的touchEvent方法中處理,


  • onInterceptTouchEvent方法,也是我們寫自訂view的時候解決事件衝突的地方

  • 當我們的ViewGroupB的onInterceptTouchEvent返回true呢?原理一樣


  • 當然,onIntercaptTouchEvent是viewGroup的方法,只有viewGroup才能決定事件是否攔截,而我們的view沒有onInterceptTouchEvent方法
在onTouchEvent中返回true
  • 我們知道返回true,是將事件由我們自己的view處理了,那麼事件被消耗了的話,流程圖有什麼不同呢?
  • 這裡我們先讓我們的view的onTouchEvent返回true


  • 如果讓我們的viewGroupB處理事件呢?我們也可以推測出來了

  • 我們從列印的log可以看出來,當我們對事件進行攔截之後,下次的事件,直接交給了ViewGroupB處理,這個也是考慮了最佳化了

  • 接下來我們將由我們的頂級控制項,ViewGroupA來處理我們的事件響應,那麼應該是什麼效果呢?

  • 結果我們可以想到,正常的流程還是會走,直到我們的ViewGroupA的onTouchEvent方法調用了,那麼下次的事件也是直接交給處理事件的控制項直接處理。
#總的來說我們已經通過Log來詳細的分析了事件的三個方法,現在大家應該很清晰時間流程了
  • 總結
    • 當我們在dispatchTouchEvent中返回true的話,那麼事件將不會分發
    • 如果我們調用了onInterceptTouchEvent返回true的話,那麼事件將會攔截,交給攔截事件的view處理,會 調用onTouchEvent方法
    • 如果我們的onTouchEvent返回true的話,那麼事件將會被消耗,下次的事件不會再向下傳遞,而是直接由處理的事件的控制項攔截,之後交給剛才的控制項處理相關事件
    • 一般我們自訂view的時候會在onIntercaptTouchEvent方法中處理事件衝突,來決定是否攔截事件
    • 而我們會在onTouchEvent中直接返回true,表示如果子控制項不處理的話,那麼我們的自訂view將會處理所有的事件
    • view沒有onIntercaptTouchEvent方法

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.