成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Android Touch事件傳遞機制通俗講解

瀏覽:2日期:2022-09-27 15:41:11

在講正題之前我們講一段有關任務傳遞的小故事,拋磚迎玉下:

話說一家軟件公司,來一個任務,分派給了開發經理去完成:

開發經理拿到,看了一下,感覺好簡單,于是

開發經理:分派給了開發組長

開發組長:分派給了自己組員(程序員)

程序員:分派給了自己帶的實習生。

實習生:好苦逼,無法分派,怎么辦啊?只能自己干了

但是實習生能不能做好,有兩種情況了。

情況一:

實習生:經過一段時間的研究,琢磨,熬夜,奮斗,死敲,皇天不負有心人啊,完成了。

后來又來一個類似的任務,也按著這樣傳遞下去了(開發經理->開發組長->程序員->實習生),又有實習生完成了。

情況二:

實習生:經過一段時間的研究,琢磨,就是毫無頭緒,無法完成,只能求教師傅(程序員)了。

程序員:啊,我怎么沒留意就給實習生搞了,這任務好難啊,自己研究下,也沒有頭緒,沒辦法只能請求組長了。

開發組長:這任務不難啊,怎么我底下的人都不會了,沒辦法,只能自己搞了,經過,一段時間,完成了,感想,以后要是又有跟這個很類似的任務,我就自己弄了,不給他們弄了。

后來又來一個類似的任務,傳遞是這樣的

開發經理:分派給開發組長

開發組長:啊,又是跟著上一個很類似的任務,我自己弄吧,沒過多久也完成了!

PS:以上就是一個任務傳遞的過程。上級一開始總會想把任務分派給自己的下屬去弄,然后任務一步一步去傳遞下去,最后由一個人去完成他,當然傳遞下去,最底下人不會,也會一步一步的回滾,又他上級去完成,如果又有一個類似的任務,那個節點不會的人就不會再傳遞給他,給他也不會弄。當然實現中,這些任務的傳遞也可能被分派人去攔截,比如說,開發組長本打算分派給程序員,突然他不想傳遞了,就半路攔截了下來。

而在我們android Touch事件傳遞機制跟這個很類似,思想差不多,有句話說,設計來源于生活。跟Touch事件有關的處理方法主要由三個:

//分派事件public boolean dispatchTouchEvent(MotionEvent ev)//攔截事件 public boolean onInterceptTouchEvent(MotionEvent ev)//處理事件public boolean onTouchEvent(MotionEvent event)

用他們的時候,我們只需要重寫一下,即可操作,這三個方法主要在三種類被調用,那三種類呢?

基類例子類擁有的方法繼承Activity(activity類)MainActivity(因項目而異)

dispatchTouchEvent,onTouchEvent繼承ViewGroup(View容器)RelativeLayout,FrameLayout,LinearLayout,AbsoluteLayout,ListView,ScrollView…

dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent繼承View(View控件)Button,EditText,TextView,ImageView….

dispatchTouchEvent,onTouchEvent

而這三個方法的含義是什么呢?

事件含義

dispatchTouchEvent用來分派事件。其中調用了onInterceptTouchEvent()和onTouchEvent(),一般不重寫該方法

onInterceptTouchEvent用來攔截事件。ViewGroup類中的源碼實現就是{return false;}表示不攔截該事件,事件將向下傳遞(傳遞給其子View);若手動重寫該方法,使其返回true則表示攔截,事件將終止向下傳遞,事件由當前ViewGroup類來處理,就是調用該類的onTouchEvent()方法

onTouchEvent用來處理事件。返回true則表示該View能處理該事件,事件將終止向上傳遞(傳遞給其父View);返回false表示不能處理,則把事件傳遞給其父View的onTouchEvent()方法來處理

根據上面的小故事,我們用代碼去實現一下:

我新建了四個類:MainActivity(開發經理),FirstFrameLayout(開發組長),SecondRelativeLayout(程序員),ThirdTextView(實習生)

在界面的層次關系如下圖:

Android Touch事件傳遞機制通俗講解

我就好比我們前面的故事情況一,情況二那么模擬下:

情況一

首先我們按照上面的故事情況一那樣,任務一級一級傳遞下去(將viewgroup的類的onInterceptTouchEvent都返回false),然后事件就會一直傳遞到,ThirdTextview,最后,我們把它的onTouchEvent返回ture(含義是實習生處理成功了)。我們點擊藍色區域。我們看下日志。

Android Touch事件傳遞機制通俗講解

情況二

首先我們還是一級級傳遞下去(將viewgroup的類的onInterceptTouchEvent都返回false),然后是傳遞到ThirdTextview,我們將它的onTouchEvent返回false(含義是實習生處理失敗了),再講SecondRelativeLayout的onTouchEvent返回false(含義是程序員處理失敗了),最后講FirstFrameLayout的onTouchEvent返回true(含義是組長處理成功了)。我們點擊藍色區域。我們看下日志,如下圖。

Android Touch事件傳遞機制通俗講解

注:上面兩種情況的日志圖,紅色框代表第一個任務,黃色框代表第二個類似的任務。根據上圖日志,我們畫下傳遞圖:

情況一事件傳遞圖:

Android Touch事件傳遞機制通俗講解

情況二事件傳遞圖:

Android Touch事件傳遞機制通俗講解

從上面兩張事件傳遞圖我們的出來一些結論:

1.事件是先有dispatchTouchEvent分派給下一級

2.要經過onInterceptTouchEvent是否需要攔截,不攔截傳遞給下一級,最終傳遞給view控件,

3.onTouchEvent方法中,在處理事件中,如果返回True,則表示能處理,傳遞將會終止。反著,不能,如果不能的話,這會返回上一級的onTouchEvent方法中,如果還是false,會一直到到上一層的onTouchEvent方法中。

好奇的我們會發現一個問題:圖二中的黃色線,沒有像紅色線那樣,先傳遞到最底層,然后再回滾回去,這是為什么呢?

答:就如我們故事中,他都知道了,底下人都不會去做了,那么他干嘛還分派給他呢,他就會自己做了,直接給onTouchEvent ,這就是事件傳遞中的“記憶”功能。我們是手指點擊藍色區域,Touch事件有兩個,第一個ACTION_DOWN,第二個ACTION_UP,第一個ACTION_DOWN事件向下傳遞到某View,它把事件繼續傳遞交給它的子View,它會記錄該事件是否被它下面的View給處理成功了,(怎么能知道呢?如果該事件會再次被向上傳遞到我這里來由我的onTouchEvent來處理,那就說明下面的View都沒能成功處理該事件);當第二個ACTION_UP事件向下傳遞到該View,該View的dispatchTouchEvent方法機會判斷,若上次的事件由下面的view成功處理了,那么這次的事件就繼續交給下面的來處理,若上次的事件沒有被下面的處理成功,那么這次的事件就不會向下傳遞了,該View直接調用自己的onTouchEvent方法來處理該事件。

PS:關于這“記憶”功能的信息只在一系列事件完成之前有效,也就是從ACTION_DOWN事件開始,直到后續事件ACTION_MOVE,ACTION_UP結束后,“記憶”的信息就會清除。也就是說如果某View處理ACTION_DOWN事件失敗了(onTouchEvent()返回false),那么后續的ACTION_MOVE,ACTION_UP等事件就不會再傳遞到該View了,由其父View自己來處理。在下一次發生ACTION_DOWN事件的時候,還是會傳遞到該View的。

補充說明:

-》若在向下傳遞的過程中被攔截了,即onInterceptTouchEvent方法返回true,則事件將停止向下傳遞,直接由當前的onTouchEvent方法來處理,若處理成功則OK,若處理不成功,則事件會向上傳遞。

謝謝收看。

實例代碼:http://download.csdn.net/detail/chenjie_920/8398413

標簽: Android
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩成人一级片| 亚洲精品美国一| 欧美日韩国产首页| 91视视频在线直接观看在线看网页在线看 | 在线精品视频小说1| 国产日韩综合av| 精品一区二区久久久| 最近看过的日韩成人| 欧美成人精品1314www| 青青草国产精品亚洲专区无| 欧美天堂亚洲电影院在线观看| 宅男噜噜噜66一区二区66| 亚洲国产一区二区a毛片| 欧美在线国产| 欧美不卡激情三级在线观看| 蜜桃精品在线观看| 蜜桃av综合| 亚洲一区二区三区四区中文字幕| 99久久99精品久久久久久| 欧美色图免费看| 五月激情综合婷婷| 国产手机视频一区二区| 国产精品麻豆视频| 夫妻av一区二区| 亚洲综合在线第一页| 欧美午夜宅男影院| 色诱亚洲精品久久久久久| 在线综合视频| 韩国成人精品a∨在线观看| 一本色道**综合亚洲精品蜜桃冫| 亚洲精品亚洲人成人网在线播放| 极品av少妇一区二区| 国产精品色噜噜| 成人国产精品免费| 91麻豆精品国产91久久久资源速度 | 蜜臀国产一区二区三区在线播放| 国产精品三区www17con| 日韩美女视频19| 狠狠色综合色区| 国产精品你懂的| 91丨九色丨国产丨porny| 精品久久人人做人人爽| 国产成人免费视频网站| 91精品国产欧美一区二区18| 国模无码大尺度一区二区三区| 在线观看欧美精品| 久久激情五月激情| 欧美日本在线视频| 国产精品乡下勾搭老头1| 在线成人高清不卡| 国产黄人亚洲片| 欧美一区二区三区四区五区 | 欧美精彩视频一区二区三区| 成人综合婷婷国产精品久久| 久久er99精品| 国产乱码精品一品二品| 国产欧美精品区一区二区三区 | 欧美另类一区| 欧美日本中文| 99久久精品国产网站| 伊人久久亚洲美女图片| 国产一区白浆| 欧美日韩久久不卡| 久久久久久免费网| 亚洲精品视频免费看| 日韩av电影免费观看高清完整版 | 亚洲精品欧洲| 久久精品123| 欧美嫩在线观看| 久久精品视频一区二区| 一区二区三区四区精品在线视频| 秋霞午夜av一区二区三区| 久久91精品久久久久久秒播| 欧美一区二区在线| 日本精品裸体写真集在线观看| 日韩免费在线观看| 亚洲精品美国一| 狠狠色综合播放一区二区| 99久久99久久久精品齐齐| 国产日韩欧美精品| 欧美日韩第一区日日骚| 国产精品的网站| 国产精品一区二区不卡| 国内久久精品| 午夜亚洲精品| 精品国产乱码久久久久久免费| 亚洲日本丝袜连裤袜办公室| 奇米综合一区二区三区精品视频| 91亚洲大成网污www| 欧美色涩在线第一页| 中文字幕欧美一区| 成人免费精品视频| 欧洲一区二区三区在线| 综合av第一页| 粉嫩av一区二区三区在线播放| 亚洲视频www| 国产亚洲一区二区三区在线观看| 免费在线观看日韩欧美| 欧美三级午夜理伦三级中文幕| 欧美日韩国产bt| 亚洲国产综合在线| 欧美日韩影院| 日韩欧美电影在线| 免费精品视频最新在线| 一区二区精品在线| 中文字幕在线不卡| 99国产精品久| 欧美一卡二卡在线| 麻豆中文一区二区| 鲁大师影院一区二区三区| 国产精品视频在线看| 久久99久久99小草精品免视看| 亚洲色图自拍| 久久久久久久免费视频了| 国产一区999| 一区二区三区四区五区视频| 国产欧美日韩精品一区| 不卡视频一二三| 欧美一区二区在线播放| 麻豆精品一区二区三区| 性一交一乱一区二区洋洋av| 亚洲三级电影网站| 在线观看的日韩av| 国产精品国产自产拍在线| eeuss鲁一区二区三区| 日韩欧美中文字幕一区| 国产激情精品久久久第一区二区| 欧美日韩一区高清| 日日夜夜免费精品视频| 国产日韩免费| 亚洲综合网站在线观看| 亚洲麻豆视频| 亚洲制服丝袜av| 91久久视频| 一区二区久久久久久| 国产欧美日韩在线播放| 亚洲综合色成人| 久久综合激情| 久久不见久久见免费视频1| 亚洲男人的天堂一区二区| 精品国产乱码久久久久久1区2区| 欧美日韩精品一区二区三区| 国产欧美日韩综合一区在线观看| av在线不卡免费看| 国产精品亚洲第一| 麻豆国产一区二区| 丝袜诱惑制服诱惑色一区在线观看| 亚洲精品日韩一| 日本91福利区| 欧美亚洲三区| 激情国产一区二区| 精品精品国产高清一毛片一天堂| 国产成人av一区二区三区在线| 久久久噜噜噜久噜久久综合| 激情久久中文字幕| 婷婷综合另类小说色区| 欧美日韩精品一二三区| 99国产精品国产精品久久| 国产精品无人区| 久久国产66| 国产露脸91国语对白| 国产亚洲欧洲一区高清在线观看| 欧美日本免费| 视频一区视频二区在线观看| 91麻豆精品国产91久久久资源速度| 99精品热视频| 一区二区三区不卡在线观看| 在线精品国精品国产尤物884a| 国产91在线观看丝袜| 日本一区免费视频| 西西人体一区二区| 国产真实精品久久二三区| 久久精品一区蜜桃臀影院| 国产精品啊啊啊| 天堂资源在线中文精品| 日韩精品一区二区三区老鸭窝| 女人天堂亚洲aⅴ在线观看| 亚洲一区二区四区蜜桃| 91精品久久久久久久99蜜桃| 女人香蕉久久**毛片精品| 亚洲一区影音先锋| 欧美群妇大交群中文字幕| 91麻豆成人久久精品二区三区| 久久夜色精品国产噜噜av| 亚洲色诱最新| 成人免费黄色大片| 亚洲国产视频直播| 久久一日本道色综合| 国产精品久久一区二区三区| 国产精品性做久久久久久| 亚洲视频电影在线| 日韩欧美国产一二三区| 性色av一区二区怡红| 欧美精品日韩| 国产精品99久久久久久久女警| 国产精品每日更新| 欧美一二区视频| 欧洲精品一区二区三区在线观看| 伊人久久成人| 国产91在线|亚洲|