可能是講解Android事件分發最好的文章

我的博客原文地址
講解的真的不錯,絕不浮誇!
http://mp.weixin.qq.com/s/GUcGzJuRwTdTZgGU3fcTPQ
https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649547708&idx=1&sn=143add3bcceba00c4e3292b49557d4bc#rd
http://balpha.de/2013/07/android-development-what-i-wish-i-had-known-earlier/

下面帶來了幾個問題:

onInterceptTouchEvent執行的問題

  1. 如果B、C都沒有處理ACTION_DOWN事件,包括沒有註冊touch和click監聽,那麼B的onInterceptTouchEvent執行幾次?
    處理一次ACTION_DOWN,因爲所有的View對此次時間都沒有興趣,那以後的Move和Up就不傳回來了。
  2. 如果B、C沒有註冊touch和click監聽,B的onTouchEvent對MotionEvent.ACTION_DOWN返回true,那麼B的onInterceptTouchEvent執行幾次?
    處理一次ACTION_DOWN,因爲B表示對這個時間感興趣,以後的move和up就沒必要再調用onInterceptTouchEvent了。B的onTouchEvent會對這些事件響應。
  3. 如果B、C都沒有攔截和處理ACTION_DOWN事件,C註冊了click監聽,那麼B的onInterceptTouchEvent和onTouchEvent會執行幾次?
    B的onInterceptTouchEvent會對ACTION_DOWN、ACTION_MOVE和ACTION_UP都會響應,但onTouchEvent對此都不響應,因爲子View已經表示對此次事件感興趣了。但是父View仍然有權利對事件攔截。

ACTION_CANCEL事件如何被觸發

當C響應了ACTION_DOWN事件後(比如ACTION_CANCEL對down事件返回true),B突然插手把ACTION_MOVE事件攔截了,那麼以後的move和up事件都交由B的onTouchEvent來處理,C的onTouchEvent就會收到ACTION_CANCEL事件。

發佈了190 篇原創文章 · 獲贊 64 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章