日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:34日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品密蕾丝视频下载| 亚洲黄色中文字幕| 99久久婷婷| 成人va天堂| 91精品精品| 国产视频一区免费看| 亚洲欧洲一区二区天堂久久| 亚洲精品电影| 午夜一区在线| 国产精品女主播一区二区三区 | 中文在线日韩| 午夜精品影视国产一区在线麻豆| 亚洲一二av| 国产日韩欧美在线播放不卡| 麻豆精品新av中文字幕| 成人污污视频| 精品丝袜在线| 午夜欧美理论片| 一区二区三区四区日韩| 欧美在线首页| 精品久久久久中文字幕小说| 精品欧美一区二区三区在线观看| 99xxxx成人网| 蜜桃av一区二区| 日本va欧美va瓶| 美女性感视频久久| 蜜桃成人精品| 亚洲精品在线二区| 欧美激情99| 国产91一区| 婷婷精品在线| 国产v日韩v欧美v| 国产精品美女| 国产精品三p一区二区| 人人草在线视频| 亚洲国产一区二区在线观看| 日韩av网站在线观看| 国产成人77亚洲精品www| 电影亚洲精品噜噜在线观看| 亚洲丝袜美腿一区| 国模精品一区| 亚洲免费中文| 精品国产乱码久久久久久1区2匹| 久久精品官网| 亚洲麻豆一区| 香蕉久久一区| 久久精品亚洲人成影院| 少妇久久久久| 91精品99| 久久在线电影| 91亚洲国产高清| 欧美国产亚洲精品| 四虎成人精品一区二区免费网站| 亚洲一区中文| 欧美日本三区| 日韩激情一区| 日本vs亚洲vs韩国一区三区二区| 精品久久在线| 欧美综合二区| 精品一区二区三区视频在线播放| 激情综合网站| 久久不见久久见免费视频7| 亚洲国产影院| 国产精品久久久久久模特 | 国产一区二区三区四区五区| 日韩精品免费一区二区在线观看| 免费观看在线色综合| 色婷婷色综合| 日韩av在线播放中文字幕| 九九在线精品| 色欧美自拍视频| 久久精品72免费观看| 国产精品女主播一区二区三区| 超碰99在线| 国产日产精品一区二区三区四区的观看方式| 黄色不卡一区| 国产欧洲在线| 国产精品一区亚洲| 综合激情婷婷| 亚洲欧美久久久| 日韩高清不卡| 麻豆精品少妇| 日韩视频1区| 亚洲激情另类| 久久理论电影| 久久电影tv| 精品国产亚洲一区二区在线观看| 日本a级不卡| 中文字幕一区二区av| 99国产精品| 欧美.日韩.国产.一区.二区| 特黄毛片在线观看| 国内不卡的一区二区三区中文字幕| 国产亚洲欧美日韩精品一区二区三区 | 国产一区二区精品久| 日韩av中文字幕一区二区三区| 99视频在线精品国自产拍免费观看| 日本免费一区二区三区四区| 麻豆国产91在线播放| 日韩有码av| 国产精品美女| 午夜久久99| 蜜桃成人av| 鲁鲁在线中文| 久久免费视频66| 国产精品久久久久久久久久齐齐| 日本不卡不码高清免费观看| 亚洲免费一区二区| 亚洲深夜影院| 夜夜嗨网站十八久久| 欧美91福利在线观看| 久久精品一区二区不卡| 在线一区视频观看| 色综合www| 亚洲1234区| 久久国产日韩| 国产综合激情| 黑丝一区二区三区| 亚洲性视频h| 亚洲天堂成人| 在线成人直播| 亚洲激情婷婷| 视频一区二区中文字幕| 亚洲一区欧美| 97成人超碰| 麻豆精品视频在线观看免费| 精品成人18| 亚洲精品永久免费视频| 国产精品久久久久av电视剧| 一区二区小说| 午夜一级在线看亚洲| 蜜臀久久99精品久久久久宅男| 美女国产一区| 久久99伊人| 亚洲欧美日本国产专区一区| 美女被久久久| 日韩精品一二三四| 国产精品a久久久久| 三上悠亚国产精品一区二区三区| 免费在线小视频| 日韩精品免费视频人成| 欧美亚洲tv| 精品国产精品久久一区免费式| 国产aⅴ精品一区二区四区| sm捆绑调教国产免费网站在线观看| 日韩在线短视频| 欧美日韩国产亚洲一区| 爽好多水快深点欧美视频| 国产亚洲一级| 蜜臀久久99精品久久久久久9| 日韩欧美三区| 久久av网站| 另类专区亚洲| 欧美女激情福利| 免费视频一区二区| 日韩中文字幕| 国产精品久久久久久模特| 麻豆理论在线观看| 日韩一级网站| 国产欧美综合一区二区三区| 成人一二三区| 亚洲激情精品| 国产日韩在线观看视频| 樱桃视频成人在线观看| 91精品啪在线观看国产18| 国产亚洲网站| 国产精品亚洲欧美一级在线| 欧美中文一区二区| 中文字幕亚洲影视| 精品视频91| 在线视频日韩| 国产日韩欧美一区在线| 日韩欧美中文| 亚洲一二三区视频| 美女视频黄免费的久久| 欧美日韩在线观看视频小说| 亚洲精品第一| 精品国产精品国产偷麻豆| 影视先锋久久| 蜜桃视频免费观看一区| 精品亚洲a∨一区二区三区18| 香蕉精品久久| 97久久亚洲| 亚洲一级特黄| 国产精一区二区| 樱桃成人精品视频在线播放| 久久国际精品| 婷婷激情久久| 国产美女亚洲精品7777| 欧美高清不卡| 欧美a一区二区| 欧美专区在线| 高清日韩中文字幕| 亚洲乱码视频| 久久电影tv| 国产欧美一区二区色老头| 久久久久久久久99精品大| 91成人在线网站| 久久视频国产| 欧美激情三区|