Android事件分發(fā)小案例

看過很多事件分發(fā)的文章,大致的過程基本都能說上來,但是每當別人列舉了一個小例子,問你事件是怎么分發(fā)的,事件觸發(fā)了沒有,就懵逼了,歸咎原因還是沒有吃透,下面列舉幾個小例子,權當回顧每個流程了

圖我拿的別人的,自己上傳上來比較大(后面的例子會忽略ViewGroupA)

1.描述:viewC與ViewGroupB都是普通的view,沒有點擊事件,現(xiàn)在點擊View

事件:

問題:對于U型事件傳遞大家應該很清楚了,但是ViewGroupB與ViewC都返回了false后,手勢剩余部分是怎么傳遞的呢?

答案:因為ViewGroupViewB與viewC在dispatchTouchEvent,onInterceptTouchEvent,onTouch中都返回了false,所以手勢剩余部分將不會傳遞給ViewGroupB與viewC,只會調(diào)用activity的dispatchTouchEvent與onTouch,貌似這個答案大家都清楚

本來原本結(jié)論到這里就結(jié)束了,和同事分享了一下,同事問,什么原理,是down事件記住了?還是別的邏輯....,好吧,只能看看源碼了...

原理:

源碼這里就不羅列了,當子 View中分發(fā)器中處理了該事件返回true,mFirstTouchTarget會被賦值,若返回了false,該值為null,所以在DecorView中不會分發(fā)到其子View中,所以其他后續(xù)事件move,up不會傳遞到ViewGroupB與ViewC中.

事件分發(fā)流程

2.描述:viewC現(xiàn)在加入了點擊事件,點擊viewC之后,手指拖動,viewC上的點擊事件會執(zhí)行嗎?

結(jié)論:不執(zhí)行,但是我一直很納悶,down事件被viewC消費,然后之后的move,up事件都會分發(fā)到viewC,為什么沒有執(zhí)行onclick事件呢?

view move事件

當手指移動出控件所處的區(qū)域后,移除長按與點擊的事件回調(diào),并設置view的press狀態(tài)為false,這樣在up事件時,檢測的該view不是處于press狀態(tài),就不會執(zhí)行到performClick方法.

具體事件分析,會持續(xù)整理,這里拋磚引玉...

參考文章:http://www.itdecent.cn/p/2be492c1df96

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,103評論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 重點參考鏈接: View Programming Guide for iOS https://developer....
    Kevin_Junbaozi閱讀 4,721評論 0 15
  • 十幾年前,《臥虎藏龍》沒看懂。唯一知道的就是獲得了很多項奧斯卡大獎,還有章子怡的嶄露頭角。以及周潤發(fā)和楊紫瓊的傾力...
    榮玥格兒閱讀 1,448評論 0 2
  • 我似乎對很多事情提不起興趣,可是多多呢似乎對一切都喜歡的不得了,對他來說只要是新鮮的,他都會覺得...
    多多媽呀閱讀 338評論 0 1

友情鏈接更多精彩內(nèi)容