android touch事件分發機制

來源:互聯網
上載者:User

標籤:android   事件處理   手勢   touch   

轉載請註明出處:http://blog.csdn.net/ZhouLi_CSDN/article/details/45878337

看了網上那麼多的部落格 ,對於android系統的事件處理仍然不是明白的特別透徹,或者一些部落格講解的總是有些歧義或者講訴的不正確或者不全面。所以自己總結了一下事件的傳遞機制希望可以協助到廣大的朋友。

  • 假設事件傳送路徑為A-B-C-D-E;
  • 一個手勢是由事件action_down開始和action_move等其它事件以及事件action_up結束的集合;
  • 一個action_down意味著一個新的手勢的開始,aciton_up意味著一個手勢的結束;
  • 事件由activity的dispatchevent開始,通過調用子view(包括viewgroup)的dispatchevent向下傳遞,直到為一個view為止;
  • 之後事件會由最下層的view向上傳遞,由onTouchEvent進行處理,一直傳遞到activity的onTouchEvent;
    • 首先架構層最先處理的是action_down事件,如果此事件在傳遞過程中沒有被oninterceptEvent掉(返回true為阻止),那麼此事件將一直傳遞到最下層;
    • 此時事件將開始由下開始往上傳遞,並且如果在途中某一層(假設為D)消費掉(即onTouchEvent返回true),那麼此事件將終止向上傳遞,並且以後事件也會通過D的dispatchEvent方法直接調用onTouchEvent方法進行處理(事件行程順序A-B-C-D);
    • 如果傳遞過程中沒有任何onTouchEvent進行消費,那麼以後此事件將直接由activity的onTouchEvent進行處理。這意味著如果你想在某一層處理手勢,你務必要在該層消費action_down以確保以後可以接收到事件。
  • action_down事件處理結束後將開始其它事件的處理(以下事件都是除了action_down的事件);
  • 你可以在某一層的onInterceptEvent中隨時決定是否終止向下傳遞事件,這取決於你的手勢處理邏輯;onInterceptEvent之後你將永遠不能在向下傳遞事件了。
  • requestDisallowInterceptTouchEvent將阻止viewgroup對事件進行中斷;
  • 如果在某一層onTouchEvent處理某一事件,並進行消費掉,那麼該事件將不會在向上傳遞;否則將繼續向上傳遞。

其它知識介紹:
ViewConfiguration類儲存了一些常量,是由架構層為我們產生的。
1.其中getScaledTouchSlop 確定是否在滑動
2.fling,是否快速滑動
3.其它自己研究去吧。

目前先介紹到這裡,後續在更新!

android 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.