日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

事件分发机制的理解

發(fā)布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 事件分发机制的理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Touch事件分發(fā)中只有兩個主角:ViewGroup和View。Activity的Touch事件事實上是調(diào)用它內(nèi)部的ViewGroup的Touch事件,可以直接當(dāng)成ViewGroup處理。

View在ViewGroup內(nèi),ViewGroup也可以在其他ViewGroup內(nèi),這時候把內(nèi)部的ViewGroup當(dāng)成View來分析。

ViewGroup的相關(guān)事件有三個:onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent。View的相關(guān)事件只有兩個:dispatchTouchEvent、onTouchEvent。

先分析ViewGroup的處理流程:首先得有個結(jié)構(gòu)模型概念:ViewGroup和View組成了一棵樹形結(jié)構(gòu),最頂層為Activity的ViewGroup,下面有若干的ViewGroup節(jié)點,每個節(jié)點之下又有若干的ViewGroup節(jié)點或者View節(jié)點,依次類推。

如圖:

當(dāng)一個Touch事件(觸摸事件為例)到達(dá)根節(jié)點,即Acitivty的ViewGroup時,它會依次下發(fā),下發(fā)的過程是調(diào)用子View(ViewGroup)的dispatchTouchEvent方法實現(xiàn)的。簡單來說,就是ViewGroup遍歷它包含著的子View,調(diào)用每個View的dispatchTouchEvent方法,而當(dāng)子View為ViewGroup時,又會通過調(diào)用ViwGroup的dispatchTouchEvent方法繼續(xù)調(diào)用其內(nèi)部的View的dispatchTouchEvent方法。上述例子中的消息下發(fā)順序是這樣的:①-②-⑤-⑥-⑦-③-④。dispatchTouchEvent方法只負(fù)責(zé)事件的分發(fā),它擁有boolean類型的返回值,當(dāng)返回為true時,順序下發(fā)會中斷。在上述例子中如果⑤的dispatchTouchEvent返回結(jié)果為true,那么⑥-⑦-③-④將都接收不到本次Touch事件。

?

總結(jié)一下就是:

1.Touch事件分發(fā)中只有兩個主角:ViewGroup和View。ViewGroup包含onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent三個相關(guān)事件。View包含dispatchTouchEvent、onTouchEvent兩個相關(guān)事件。其中ViewGroup又繼承于View。

2.ViewGroup和View組成了一個樹狀結(jié)構(gòu),根節(jié)點為Activity內(nèi)部包含的一個ViwGroup。

3.觸摸事件由Action_Down、Action_Move、Aciton_UP組成,其中一次完整的觸摸事件中,Down和Up都只有一個,Move有若干個,可以為0個。

4.當(dāng)Acitivty接收到Touch事件時,將遍歷子View進(jìn)行Down事件的分發(fā)。ViewGroup的遍歷可以看成是遞歸的。分發(fā)的目的是為了找到真正要處理本次完整觸摸事件的View,這個View會在onTouchuEvent結(jié)果返回true。

5.當(dāng)某個子View返回true時,會中止Down事件的分發(fā),同時在ViewGroup中記錄該子View。接下去的Move和Up事件將由該子View直接進(jìn)行處理。由于子View是保存在ViewGroup中的,多層ViewGroup的節(jié)點結(jié)構(gòu)時,上級ViewGroup保存的會是真實處理事件的View所在的ViewGroup對象:如ViewGroup0-ViewGroup1-TextView的結(jié)構(gòu)中,TextView返回了true,它將被保存在ViewGroup1中,而ViewGroup1也會返回true,被保存在ViewGroup0中。當(dāng)Move和UP事件來時,會先從ViewGroup0傳遞至ViewGroup1,再由ViewGroup1傳遞至TextView。

6.當(dāng)ViewGroup中所有子View都不捕獲Down事件時,將觸發(fā)ViewGroup自身的onTouch事件。觸發(fā)的方式是調(diào)用super.dispatchTouchEvent函數(shù),即父類View的dispatchTouchEvent方法。在所有子View都不處理的情況下,觸發(fā)Acitivity的onTouchEvent方法。

7.onInterceptTouchEvent有兩個作用:1.攔截Down事件的分發(fā)。2.中止Up和Move事件向目標(biāo)View傳遞,使得目標(biāo)View所在的ViewGroup捕獲Up和Move事件。

?

?

?

補(bǔ)充:

“觸摸事件由Action_Down、Action_Move、Aciton_UP組成,其中一次完整的觸摸事件中,Down和Up都只有一個,Move有若干個,可以為0個。”,這里補(bǔ)充下其實UP事件是可能為0個的。

轉(zhuǎn)載于:https://www.cnblogs.com/wgha/p/5854621.html

總結(jié)

以上是生活随笔為你收集整理的事件分发机制的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩精品导航 | 亚洲永久av | 国产高潮国产高潮久久久 | 波多野结衣视频免费在线观看 | 日本一二三区在线 | 人人涩 | 天天射天天干 | 成人性做爰aaa片免费看不忠 | 精品一卡二卡 | 欧美人性生活视频 | 精品一区二区免费视频 | 一级黄色性生活视频 | 一品毛片 | 亚洲国产成人无码av在线 | 五月少妇| 精品人妻伦一二三区久 | 人妻一区二区三区四区 | 一级特黄aaa | 宅宅少妇无码 | 国产一区二区三区在线观看免费 | 成人欧美一区二区三区黑人一 | たちの熟人妻av一区二区 | 国产aⅴ无码片毛片一级一区2 | 国产精品免费一区 | 日本精品一区二区三区四区的功能 | 亚洲av网址在线 | 涩涩屋污| 日本黄色生活片 | 欧美亚洲二区 | 韩国19主播内部福利vip | www.天堂av | 欧洲中文字幕 | 久久人 | 日韩在线视频一区二区三区 | 青青青在线观看视频 | 亚洲男人天堂av | 黄色小视频在线免费观看 | 快色视频在线观看 | 一二三不卡 | 成人av资源| 麻豆md0077饥渴少妇 | 亚洲激情在线观看 | 国产有码 | 成人区人妻精品一熟女 | 国产精品网址 | 欧美一级高潮片 | 91亚洲一线产区二线产区 | av在线有码 | 国产精品视频在线观看 | 久久精品综合 | 女同性αv亚洲女同志 | 一区二区三区美女视频 | 五月激情视频 | 中文字幕在线观看三区 | 国产一级做a | 国产毛片a | 国产成人二区 | 女人下部全棵看视频 | 午夜做爰xxxⅹ性高湖视频美国 | 亚洲av综合色区无码一区 | 日韩黄大片 | 不许穿内裤随时挨c调教h苏绵 | 成人区一区二区 | 日本黄色免费在线观看 | 国产高清视频一区二区 | 天堂av在线网 | 亚洲视频在线观看网址 | 欧美系列第一页 | 免费激情视频网站 | 韩国av永久免费 | 欧美www视频 | 经典杯子蛋糕日剧在线观看免费 | 男生操女生屁股 | 黄色免费视频 | 国产精品午夜一区二区 | 绿帽av| www.久久成人 | 欧美在线视频免费播放 | 国产亚洲精久久久久久无码77777 | 日本va欧美va国产激情 | 久久久精品人妻一区二区三区 | 精品国产乱子伦一区二区 | 在线免费观看日韩 | 国产农村妇女精品 | 青青99| 欧美午夜激情影院 | 久久精品欧美一区二区三区不卡 | 少妇高潮一区二区三区99刮毛 | 日本黄色片免费看 | 国产一区亚洲 | 91免费黄视频 | 精品一区二区三区免费毛片爱 | 激情黄色小说视频 | xxxxx黄色片| 精品少妇人妻一区二区黑料社区 | 告诉我真相俄剧在线观看 | 97人妻精品视频一区 | 999精品视频在线观看 | 淫视频在线观看 |