Android的事件分發(fā)機(jī)制

學(xué)習(xí)Android的同學(xué)注意了Q藁凇<丁梧兼!

學(xué)習(xí)過(guò)程中遇到什么問(wèn)題或者想獲取學(xué)習(xí)資源的話放吩,歡迎加入Android學(xué)習(xí)交流群,群號(hào)碼:364595326? 我們一起學(xué)Android羽杰!

Android中view的事件傳遞是從上往下傳遞的屎慢,即事件總是先傳遞給父元素瞭稼,然后父元素在把事件分發(fā)給子View忽洛。

事件分發(fā)傳遞過(guò)程中有一個(gè)很重要的對(duì)象:MotionEvent腻惠,MotionEvent有個(gè)方法getAction,該方法返回int類(lèi)型欲虚,我們可以從該返回值中判斷事件類(lèi)型集灌,典型常見(jiàn)的有以下三種:

ACTION_DOWN:手指剛點(diǎn)擊屏幕時(shí)

ACTION_MOVE:手指在屏幕上移動(dòng)

ACTION_UP:手機(jī)離開(kāi)屏幕

我們把從手指觸摸到屏幕開(kāi)始直到手指離開(kāi)屏幕所產(chǎn)生的?一系列事件叫做同一事件序列,一個(gè)事件序列包含一個(gè)ACTION_DOWN复哆、若干個(gè)ACTION_MOVE欣喧、一個(gè)ACTION_UP。

事件的分發(fā)過(guò)程由三個(gè)很重要的方法來(lái)共同完成的:

1梯找、public boolean dispatchTouchEvent(MotionEvent event)

View的分發(fā)事件唆阿,一個(gè)View只要能接收到事件,首先執(zhí)行的是該方法锈锤,而且該方法是一定會(huì)執(zhí)行?驯鳖,這里我們就稱它為分發(fā)事件。

2久免、public boolean onInterceptTouchEvent?(MotionEvent event)

View的攔截事件浅辙,正常情況下dispatchTouchEvent分發(fā)事件會(huì)調(diào)用該方法,該方法的返回值用以判斷當(dāng)前View是否要攔截該事件阎姥,返回true记舆,則當(dāng)前View的onTouchEvent方法將被調(diào)用,并且事件不會(huì)傳遞下去呼巴。這里我們需要注意一下泽腮,如果一個(gè)View決定攔截事件,也就是onInterceptTouchEvent返回true衣赶,那么在同一個(gè)事件序列的其余事件執(zhí)行過(guò)程中并不會(huì)在調(diào)用該方法诊赊。這里我們就稱它為攔截事件。

如果一個(gè)View(如TextView,直接繼承于View而不是ViewGroup屑埋,不能添加子View)豪筝,那么該View是沒(méi)有onInterceptTouchEvent方法,而且一旦有事件傳遞給它摘能,onToucheEvent方法將會(huì)被調(diào)用续崖,除非設(shè)置不可點(diǎn)擊的(clickable和longClickable同時(shí)設(shè)為false);?[備注:activity也沒(méi)有onInterceptTouchEvent事件]

3、public boolean onTouchEvent(MotionEvent event)

View用來(lái)處理點(diǎn)擊事件团搞,返回值表示當(dāng)前View是否消費(fèi)了該事件严望,如果事件傳遞到當(dāng)前 View 的 onTouchEvent 方法,而該方法返回了 false逻恐,那么這個(gè)事件會(huì)從當(dāng)前 View 向上傳遞像吻,并且都是由上層 View 的 onTouchEvent 來(lái)接收峻黍,而且接收不到下一次事件。換句話說(shuō)就是:如果沒(méi)消費(fèi)拨匆,也就是說(shuō)返回false姆涩,那么在同一事件序列的其余事件將不會(huì)在傳遞過(guò)來(lái)。?

如果一個(gè)View設(shè)置了onTouchListener事件惭每,那么會(huì)先執(zhí)行onTouchListener骨饿,然后根據(jù)返回值在判斷是否要執(zhí)行onTouchEvent方法(返回true則不執(zhí)行onToucheEvent,反之亦然).??

這里有段偽代碼可以把這三個(gè)事件的關(guān)系表現(xiàn)出來(lái)(摘自:android開(kāi)發(fā)藝術(shù)):?

public boolean dispatchTouchEvent(MotionEvent event){

? ? boolean consume = false;

? ? if(onInterceptTouchEvent(event)){

? ? ? ? consume = onTouchEvent(event);

? ? }?else{

? ? ? ? consume = child.dispatchTouchEvent(event);?

? ? }

? ? return consume;?

}?

相信大家都看得很清楚台腥。

學(xué)習(xí)Android的同學(xué)注意了:曜浮!黎侈!

學(xué)習(xí)過(guò)程中遇到什么問(wèn)題或者想獲取學(xué)習(xí)資源的話察署,歡迎加入Android學(xué)習(xí)交流群,群號(hào)碼:364595326? 我們一起學(xué)Android峻汉!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贴汪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子俱济,更是在濱河造成了極大的恐慌嘶是,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛛碌,死亡現(xiàn)場(chǎng)離奇詭異聂喇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蔚携,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)希太,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人酝蜒,你說(shuō)我怎么就攤上這事誊辉。” “怎么了亡脑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵堕澄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我霉咨,道長(zhǎng)蛙紫,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任途戒,我火速辦了婚禮坑傅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喷斋。我一直安慰自己唁毒,他們只是感情好蒜茴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著浆西,像睡著了一般粉私。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上室谚,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天毡鉴,我揣著相機(jī)與錄音,去河邊找鬼秒赤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛憎瘸,可吹牛的內(nèi)容都是我干的入篮。 我是一名探鬼主播硬纤,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盹沈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了动壤?” 一聲冷哼從身側(cè)響起锅风,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酥诽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后皱埠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肮帐,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年边器,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了训枢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忘巧,死狀恐怖恒界,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砚嘴,我是刑警寧澤十酣,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站际长,受9級(jí)特大地震影響耸采,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜也颤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一洋幻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翅娶,春花似錦文留、人聲如沸好唯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)骑篙。三九已至,卻和暖如春森书,著一層夾襖步出監(jiān)牢的瞬間靶端,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工凛膏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杨名,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓猖毫,卻偏偏與公主長(zhǎng)得像台谍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吁断,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容