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

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

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

瀏覽:36日期: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久久,三上悠亚国产精品一区二区三区
亚洲资源av| 久久国产乱子精品免费女| 日韩精品亚洲一区二区三区免费| 肉色欧美久久久久久久免费看| 麻豆精品av| 福利一区二区| 久久久久亚洲精品中文字幕| 亚洲一区二区三区中文字幕在线观看| 亚洲综合在线电影| 亚洲小说欧美另类婷婷| 欧美午夜不卡| 亚洲欧洲日韩精品在线| 日韩av网站在线观看| 18国产精品| 国产福利91精品一区二区| 激情国产在线| 亚洲精华国产欧美| 亚洲最大av| 麻豆精品新av中文字幕| 天堂中文av在线资源库| 亚洲第一区色| 综合国产视频| 欧美黑人做爰爽爽爽| 日韩伦理福利| 99精品99| 免费在线观看一区| 亚洲无线一线二线三线区别av| 香蕉久久夜色精品国产| 国产精品丝袜在线播放| www.com.cn成人| 91久久精品无嫩草影院| 日韩欧美一区二区三区免费看| 激情综合自拍| 91欧美日韩在线| 免费视频一区三区| 久久精品99久久久| 日韩精品影视| 亚洲一二av| 另类专区亚洲| 国产精品一二| 午夜在线观看免费一区| 粉嫩av一区二区三区四区五区 | 桃色一区二区| 日韩高清一区| 蜜臀久久99精品久久一区二区| 日韩av三区| 一区二区精彩视频| 99香蕉国产精品偷在线观看| 国产成人精品999在线观看| 日韩avvvv在线播放| 五月天久久久| 91精品综合| 亚洲精品**中文毛片| 国产精品尤物| 久久国产人妖系列| 欧美亚洲二区| 蜜臀精品一区二区三区在线观看| 国产精品国产一区| 国产精品v日韩精品v欧美精品网站 | 蜜臀av在线播放一区二区三区| av免费不卡国产观看| 高清日韩中文字幕| 国产一区二区视频在线看| 国产精品一页| 国产精品一区高清| 国产欧美精品| 国产精品久一| 国产日韩1区| 国产精品香蕉| 国产麻豆一区二区三区精品视频| 日韩精品一二三四| 亚洲精品字幕| 日韩一区二区三区四区五区| 日韩激情网站| 国产精品激情| 日本欧美国产| 成人羞羞视频在线看网址| 九九精品调教| 亚洲一区二区三区四区五区午夜| 日韩一级网站| 伊人国产精品| 欧美日本久久| 中文字幕成在线观看| 99久久精品网| 国产精品日本| 18国产精品| 亚洲电影有码| 一区二区三区网站| 国产精品三级| 久久网站免费观看| 免费不卡在线视频| 97精品国产一区二区三区| 在线视频观看日韩| 天堂精品久久久久| 色综合五月天| 亚洲精品乱码日韩| 国产精品精品| 亚洲精品一级| 色婷婷久久久| 日韩精品国产精品| 色偷偷色偷偷色偷偷在线视频| 99视频+国产日韩欧美| 久久精品国产亚洲aⅴ| 亚洲免费激情| 国产理论在线| 欧美日韩亚洲三区| 麻豆精品网站| 日韩欧美一区二区三区在线观看| 热久久久久久久| 中文字幕成在线观看| 欧美一区精品| 99精品电影| av日韩中文| 久久国产精品美女| 国产精品女主播一区二区三区| 麻豆久久一区| 国产精品乱战久久久| 中文字幕成人| 久久国产精品99国产| 99久久激情| 欧美1级日本1级| 日韩欧美一区免费| 国产精选一区| 日本成人手机在线| 视频一区欧美日韩| 99精品在线观看| 国产一区2区在线观看| 久久国产视频网| 亚洲精品大片| 亚洲欧美日韩视频二区| 高清精品久久| 97精品国产一区二区三区| 国产一区二区三区精品在线观看| 久久精品99国产精品| 国产亚洲字幕| 久久久精品区| 国产成人精品999在线观看| 色在线中文字幕| 成人精品亚洲| 国产午夜精品一区二区三区欧美| 99视频精品| 97久久中文字幕| 国产精品久久久久av蜜臀| 欧美精品影院| 精品久久久久中文字幕小说| 国产欧美日韩精品一区二区免费| 久久国产欧美日韩精品| 另类综合日韩欧美亚洲| 欧美男人天堂| 99日韩精品| 国产精品国码视频| 日韩在线二区| 中文字幕一区二区精品区| 久久国产欧美日韩精品| 日韩国产一区二区| 日韩中文字幕1| 国产一区二区三区日韩精品| 在线视频观看日韩| 国产精品网址| 九九综合在线| 日韩午夜精品| 国产aⅴ精品一区二区四区| 亚洲午夜视频| 国产精品一区三区在线观看| 国产精品国产三级国产在线观看| 日韩精品影视| 亚洲精品美女91| 国产精品婷婷| 久久精品国产久精国产| 一区在线观看| 成人亚洲一区| 日本v片在线高清不卡在线观看| аⅴ资源天堂资源库在线| 天堂va在线高清一区| 国产高清不卡| 久久99伊人| 亚洲伦乱视频| 国内精品麻豆美女在线播放视频| 99视频一区| 欧美性感美女一区二区| 国产欧美一区二区三区精品观看| 久久中文亚洲字幕| 国产在线视频欧美一区| 欧美日本不卡| 日韩专区视频网站| 国产精品丝袜xxxxxxx| 亚洲福利久久| 亚洲午夜av| 国产专区一区| 激情久久五月| 日韩成人精品一区二区| 精品少妇一区| 久久不见久久见国语| 日韩激情网站| 国产调教精品| 国产日韩高清一区二区三区在线 | 亚洲精品国产偷自在线观看| 美女毛片一区二区三区四区最新中文字幕亚洲| 欧美国产91| 激情五月色综合国产精品|