android TouchEvent 事件處理流程學(xué)習(xí)

1.? 怎么做到當(dāng)路徑上有一個(gè)ViewGroup攔截了Down事件之后,后續(xù)的move , up等事件就只交給它來(lái)處理,? 而不會(huì)再繼續(xù)往下走了?

2. ?個(gè)中主流控件, 包括FrameLayout, RelatvieLayout, LinearLayout, 等都是如何實(shí)現(xiàn)其 onTouchEvent, onInterceptTouchEvent, dispatchTouchEvent方法的.?"

有什么共性? ? 有什么區(qū)別?

-----上面提到的三個(gè)布局都沒(méi)有實(shí)現(xiàn)任何一個(gè)方法, 都是集成的ViewGroup中的邏輯, ? 而他們的直接父類, ViewGroup 也只實(shí)現(xiàn)了onInterceptTouchEvent() 和dispatchTouchEvent()

并且onInterceptTouchEvent()中基本上就是返回false,( 除了是鼠標(biāo)拖動(dòng)滾動(dòng)條的事件).

所以基本上, 分析的重點(diǎn)就在View.java和ViewGroup.java中的dispatchTouchEvent()方法.

ScrollView ?實(shí)現(xiàn)了自己的onInterceptTouchEvent()onTouchEvent() ? ?注意ScrollView 繼承了FrameLayout, 只支持豎向

onInterceptTouchEvent() 注釋說(shuō)的明白: 我們只關(guān)心當(dāng)前是不是正在被滑動(dòng)(dragging).

從實(shí)際效果上, 不管承載的控件們是否攔截或者處理了touchEvent, ScrollView本身都是會(huì)相應(yīng)滑動(dòng)的.

只要是move事件, 判斷出滑動(dòng)距離超過(guò)touchSlop之后, ?就認(rèn)為是在dragging. 那么就會(huì)返回true, 后續(xù)的事件都會(huì)自行處理.并且從這個(gè)返回true的事件開始, 會(huì)給子控件一個(gè)cancel.

再重申一遍重點(diǎn):

只有在move事件中, 并且當(dāng)累計(jì)滑動(dòng)距離(初始位置是在down時(shí)記錄的)已經(jīng)超過(guò)了touchSlop了, ?那么就會(huì)對(duì)子控件發(fā)出cancel事件, 對(duì)父控件調(diào)用:requestDisallowInterceptTouchEvent(true), 通知父親控件, 不要瞎摻和了.

上面說(shuō)的的對(duì)子控件發(fā)出cancel事件是怎么做到的? ?在這個(gè)事件的處理流程上, dispatchTouchEvent()中, 先調(diào)用自身的onInterceptTouchEvent()判斷自身是否攔截, 如上面分析, 如果攔截, 那么下面的intercepted變量為true, 所以接下來(lái)調(diào)用dispatchTransformedTouchEvent()時(shí), cancelChild參數(shù)為true, 里面會(huì)生成cancel事件, 并交給子控件處理. ?并且有一點(diǎn)注意:對(duì)于這個(gè)子控件, 處理完cancel事件之后, 后續(xù)的move, up事件也不會(huì)再交給它處理了. ? 中斷了, ?跟它沒(méi)關(guān)系了,



問(wèn)題: 那么上面說(shuō)的這點(diǎn)又是怎么做到的呢: ?怎么才做到cancel之后, 后續(xù)的事件都不給這個(gè)子控件了?



上面這個(gè)段代碼中高亮選中部分, ?會(huì)在子控件處理完cancel之后, 把mFirstTouchTarget置為null. 因?yàn)閷?duì)于ScrollView, 只有一個(gè)子控件, 所以next為null.

mFirstTouchTarget變成了null, 那下一次進(jìn)入dispatchTouchEvent()后, 處理就簡(jiǎn)單多了, 見(jiàn)下面代碼段:


對(duì)于之后的move事件, 并且mFirstTouchTarget已經(jīng)為null, ?直接設(shè)置intercepted為true. ? 同時(shí)后面的流程也就不再調(diào)用子控件的dispatchTouchEvent()

AbsListView 實(shí)現(xiàn)了自己的onInterceptTouchEvent()onTouchEvent()


----------未完

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市焚鹊,隨后出現(xiàn)的幾起案子相恃,更是在濱河造成了極大的恐慌瞒大,老刑警劉巖宏邮,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡佛嬉,警方通過(guò)查閱死者的電腦和手機(jī)夜只,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門垒在,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人扔亥,你說(shuō)我怎么就攤上這事场躯。” “怎么了旅挤?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵踢关,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我粘茄,道長(zhǎng)签舞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任驹闰,我火速辦了婚禮瘪菌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘹朗。我一直安慰自己师妙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布屹培。 她就那樣靜靜地躺著默穴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褪秀。 梳的紋絲不亂的頭發(fā)上蓄诽,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音媒吗,去河邊找鬼仑氛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闸英,可吹牛的內(nèi)容都是我干的锯岖。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼甫何,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼出吹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起辙喂,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捶牢,失蹤者是張志新(化名)和其女友劉穎鸠珠,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秋麸,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渐排,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竹勉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片飞盆。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖次乓,靈堂內(nèi)的尸體忽然破棺而出吓歇,到底是詐尸還是另有隱情,我是刑警寧澤票腰,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布城看,位于F島的核電站,受9級(jí)特大地震影響杏慰,放射性物質(zhì)發(fā)生泄漏测柠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一缘滥、第九天 我趴在偏房一處隱蔽的房頂上張望轰胁。 院中可真熱鬧,春花似錦朝扼、人聲如沸赃阀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)榛斯。三九已至,卻和暖如春搂捧,著一層夾襖步出監(jiān)牢的瞬間驮俗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工允跑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留王凑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓聋丝,卻偏偏與公主長(zhǎng)得像荤崇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子潮针,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

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