我的博客原文地址
講解的真的不錯,絕不浮誇!
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執行的問題
- 如果B、C都沒有處理ACTION_DOWN事件,包括沒有註冊touch和click監聽,那麼B的onInterceptTouchEvent執行幾次?
處理一次ACTION_DOWN,因爲所有的View對此次時間都沒有興趣,那以後的Move和Up就不傳回來了。 - 如果B、C沒有註冊touch和click監聽,B的onTouchEvent對MotionEvent.ACTION_DOWN返回true,那麼B的onInterceptTouchEvent執行幾次?
處理一次ACTION_DOWN,因爲B表示對這個時間感興趣,以後的move和up就沒必要再調用onInterceptTouchEvent了。B的onTouchEvent會對這些事件響應。 - 如果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事件。