国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

瀏覽:4日期: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
相關文章:
主站蜘蛛池模板: 亚洲精品tv久久久久 | 亚洲精品国产专区91在线 | 欧美一区二区三区在线观看免费 | 亚洲欧美视频一区二区三区 | 欧美日本一区二区 | 自拍一区在线观看 | 欧美一级网站 | 亚洲人成高清 | 亚洲人成在线免费观看 | 午夜爽爽爽 | 国内成人精品亚洲日本语音 | 国产思思| 亚洲成人综合视频 | 久草视频免费在线 | 中文国产日韩欧美视频 | 国模偷拍在线观看免费视频 | 免费一级毛片麻豆精品 | 狠狠色噜狠狠狠狠色综合久 | 国产精品久久久久a影院 | 夜色综合| 精品视自拍视频在线观看 | 天堂视频在线免费观看 | 成人99国产精品 | 久久综合狠狠综合狠狠 | 国产在线观看一区二区三区 | 亚洲三级精品 | 国产精品成人一区二区三区 | 92自拍视频 | 亚洲日本视频 | 日韩成人三级 | 亚洲视频在线免费 | 一级午夜a毛片免费视频 | 免费观看成人久久网免费观看 | 亚洲色在线视频 | 亚洲高清视频免费 | 亚洲精品第一区二区在线 | 波多野结衣在线免费视频 | 最新国产三级久久 | 黄网站色视频免费观看w | 2021国产成人精品久久 | 亚洲欧美日韩天堂 |