Android觸摸事件傳遞機制

點擊事件分發(fā)

  • ACTION_DOWN事件觸發(fā)時卸亮,會從Activity -> PhoneWindow -> DecorView -> ViewGroup -> View順序唠椭,逐層調(diào)用對應(yīng)的dispatchTouchEvent方法分發(fā)择克。
  • 在View的dispatchTouchEvent中模蜡,常理會調(diào)用onTouchEvent顾瞪,在onTouchEvent方法中彻况,ACTION_DOWN時名扛,會檢查是否是長按,時長超過500毫秒則是長按括儒;在ACTION_UP時绕沈,會調(diào)用performOnClickInteral,依次調(diào)用onClick()帮寻,響應(yīng)點擊事件乍狐。如果重寫onTouch()方法,返回true固逗,則View的dispatchTouchEvent中浅蚪,有一個if判斷條件成立,會將boolean局部變量result置true烫罩,那么接下來一個if判斷中惜傲,該result為true,就不會調(diào)用onTouchEvent方法贝攒,因此該次觸摸事件則消費結(jié)束盗誊,不會再響應(yīng)onLongClick和onClick。如果重寫onLongClick()方法隘弊,返回true哈踱,則在onTouchEvent方法中,ACTION_DOWN時梨熙,檢查是長按后开镣,會調(diào)用onLongClick(),響應(yīng)長按事件串结,該方法返回true后哑子,會將mHasPerformedLongPress代表是否執(zhí)行了長按事件的boolean值置true;在ACTION_UP時肌割,調(diào)用performOnClickInteral前卧蜓,會先判斷mHasPerformedLongPress,為true把敞,則不調(diào)弥奸,為false,才調(diào)用奋早。因此盛霎,重寫onLongClick()方法,返回true時耽装,不會再響應(yīng)onClick愤炸。

點擊事件傳遞過程:

  1. ACTION_DOWN事件,Viewgroup的dispatchTouchEvent分發(fā)事件掉奄,onInterceptTouchEvent攔截事件规个,默認不攔截,繼續(xù)向下分發(fā)給子View,子View的dispatchTouchEvent分發(fā)事件诞仓,傳給子View的onTouchEvent缤苫,若返回true消費,則后面的ACTION_MOVE和ACTION_UP事件按順序繼續(xù)分發(fā)傳遞墅拭。
  2. 事件傳給子View的onTouchEvent時活玲,子View返回false,不消費事件谍婉,則事件回傳給ViewGroup的onTouchEvent來消費舒憾,以后的時間會按照ViewGoup的dispatchTouchEvent到onTouchEvent來傳遞消費。
  3. 當ViewGroup的onInterceptTouchEvent攔截事件后穗熬,則會傳遞給ViewGroup的onTouchEvent消費珍剑,以后的其他事件也會按照ViewGoup的dispatchTouchEvent到onTouchEvent來傳遞消費,不會再傳給子View死陆。

解決觸摸事件沖突:

  • 外部攔截招拙。ViewGroup重寫onInterceptTouchEvent方法,默認不攔截措译,事件往下分發(fā)給子View别凤,若返回true,則攔截此次事件领虹,將事件傳給ViewGroup的onTouchEvent處理规哪。
  • 內(nèi)部攔截。重寫子View的dispatchTouchEvent方法塌衰,方法中調(diào)用getParent().requestDisallowInterceptTouchEvent(true)方法诉稍,傳true則代表不希望ViewGroup攔截事件,傳false則代表希望ViewGroup攔截事件最疆。
  • 內(nèi)部攔截杯巨。子View重寫onTouchEvent方法,返回true努酸,則子View消費該次事件服爷,返回false,該次事件返回給ViewGroup的onTouchEvent處理获诈。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仍源,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舔涎,更是在濱河造成了極大的恐慌笼踩,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亡嫌,死亡現(xiàn)場離奇詭異嚎于,居然都是意外死亡桶至,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門匾旭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人圃郊,你說我怎么就攤上這事价涝。” “怎么了持舆?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵色瘩,是天一觀的道長。 經(jīng)常有香客問我逸寓,道長居兆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任竹伸,我火速辦了婚禮泥栖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勋篓。我一直安慰自己吧享,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布譬嚣。 她就那樣靜靜地躺著钢颂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拜银。 梳的紋絲不亂的頭發(fā)上殊鞭,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音尼桶,去河邊找鬼操灿。 笑死,一個胖子當著我的面吹牛泵督,可吹牛的內(nèi)容都是我干的牲尺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼幌蚊,長吁一口氣:“原來是場噩夢啊……” “哼谤碳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起溢豆,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤蜒简,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漩仙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搓茬,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡犹赖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卷仑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峻村。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锡凝,靈堂內(nèi)的尸體忽然破棺而出粘昨,到底是詐尸還是另有隱情,我是刑警寧澤窜锯,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布张肾,位于F島的核電站,受9級特大地震影響锚扎,放射性物質(zhì)發(fā)生泄漏吞瞪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一驾孔、第九天 我趴在偏房一處隱蔽的房頂上張望芍秆。 院中可真熱鬧,春花似錦翠勉、人聲如沸浪听。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迹栓。三九已至,卻和暖如春俭缓,著一層夾襖步出監(jiān)牢的瞬間克伊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工华坦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留愿吹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓惜姐,卻偏偏與公主長得像犁跪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子歹袁,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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