事件分發(fā)機制的總結

為什么要了解Android事件分發(fā)機制肺孵?

問題一:內外嵌套的滑動沖突問題
不知大家有沒有遇到過這樣的情況正卧,一個滾動的控件中再嵌套一個滾動的控件惯豆,發(fā)現(xiàn)當你要滾動里面的控件時池磁,外面的控件滾動了,里面的控件卻不滾動楷兽,或者框仔,你要想讓里面的控件滾動到底時,外面的控件才開始滾動.

問題二:方向滑動沖突問題
ListView的header放入一個左右滑動的banner或者說viewpager拄养,那么當手指在banner上下滑動時將無法促使外層ListView的滑動离斩,這就非常影響用戶的使用體驗了银舱。

當了解了View的事件分發(fā)機制,以上問題將不再是問題了跛梗。 我們就可以利用事件分發(fā)機制來制定我們想要的滾動規(guī)則寻馏。



默認的情況下,當手指點擊最中間的View1時核偿,觸發(fā)順序如下(自上往下):

EVENT_DOWN:
activity1 - dispatchTouchEvent
viewGroup1 - dispatchTouchEvent
viewGroup1 - onInterceptTouchEvent
view1 - dispatchTouchEvent
view1 - onTouchEvent
viewGroup1 - onTouchEvent
activity1 - onTouchEvent

EVENT_MOVE:
activity1 - dispatchTouchEvent
activity1 - onTouchEvent

EVENT_UP:
activity1 - dispatchTouchEvent
activity1 - onTouchEvent
簡單流程圖
1诚欠、為什么EVENT_MOVE和EVENT_UP僅僅在最外層的activity1傳遞,而沒有傳遞到viewGroup1和view1漾岳?

Android中事件分發(fā)機制中轰绵,如果內層的view都沒有消耗事件,事件默認由最外層View進行處理尼荆,也就是activity處理事件左腔。

2、什么時候view才算消費了事件捅儒?

第一種情況液样,view的clickable或者longClickable為true(普通view的clickable默認false);
第二種情況巧还,view設置了點擊監(jiān)聽或者長按監(jiān)聽鞭莽,因為通過源碼可以看到,setOnClickListener中調用了setClickable(true)麸祷;
第三種情況澎怒,setOnTouchListener中返回true,這種也是最常見的阶牍。在setOnTouchListener中處理事件喷面,然后返回true,那么該view的onTouchEvent將不會被執(zhí)行荸恕。

3乖酬、viewGroup中的onInterceptTouchEvent在實際應用中起到什么作用?

舉個例子融求,我們要自定義一個類似于listview的控件時咬像,自定義完畢后,在使用過程中生宛,發(fā)現(xiàn)我們自定義的listview控件中的item設置了button控件县昂,button控件clickable為true,默認消費了事件陷舅,那么只要我們的手指觸控在button上時倒彰,就不能對整個listview控件進行滑動了。

  • 重寫onInterceptTouchEvent方法就起到作用了莱睁,當手指滑動距離大于一定距離d時待讳,我們就讓onInterceptTouchEvent返回true芒澜,阻止事件往下傳遞。(tips:上面的距離d可以通過
    ViewConfigurationCompat.getScaledPagingTouchSlop(ViewConfiguration.get(context))獲却吹)
  • 但是痴晦,如果我們把item中的button替換成listview呢。琳彩。那么誊酌,上面我們重寫onInterceptTouchEvent之后,外層的listview攔截了事件以致于item中的listview無法滾動露乏。這個很好解決碧浊,ViewGroup中有一個requestDisallowInterceptTouchEvent(true)方法,可以發(fā)出一次“禁止下一個事件的攔截”的請求瘟仿,可以在我們的view的任何一個touch方法中調用view.getParent.requestDisallowInterceptTouchEvent(true)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末箱锐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猾骡,更是在濱河造成了極大的恐慌瑞躺,老刑警劉巖敷搪,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兴想,死亡現(xiàn)場離奇詭異,居然都是意外死亡赡勘,警方通過查閱死者的電腦和手機嫂便,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闸与,“玉大人毙替,你說我怎么就攤上這事〖#” “怎么了厂画?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拷邢。 經(jīng)常有香客問我袱院,道長,這世上最難降的妖魔是什么瞭稼? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任忽洛,我火速辦了婚禮,結果婚禮上环肘,老公的妹妹穿的比我還像新娘欲虚。我一直安慰自己,他們只是感情好悔雹,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布复哆。 她就那樣靜靜地躺著欣喧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梯找。 梳的紋絲不亂的頭發(fā)上续誉,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音初肉,去河邊找鬼酷鸦。 笑死,一個胖子當著我的面吹牛牙咏,可吹牛的內容都是我干的臼隔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼妄壶,長吁一口氣:“原來是場噩夢啊……” “哼摔握!你這毒婦竟也來了?” 一聲冷哼從身側響起丁寄,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤氨淌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后伊磺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盛正,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年屑埋,在試婚紗的時候發(fā)現(xiàn)自己被綠了豪筝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡摘能,死狀恐怖续崖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情团搞,我是刑警寧澤严望,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站逻恐,受9級特大地震影響像吻,放射性物質發(fā)生泄漏。R本人自食惡果不足惜梢莽,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一萧豆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昏名,春花似錦涮雷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽样刷。三九已至,卻和暖如春览爵,著一層夾襖步出監(jiān)牢的瞬間置鼻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工蜓竹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留箕母,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓俱济,卻偏偏與公主長得像嘶是,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛛碌,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容

  • Android 事件分發(fā)和滑動沖突都是開發(fā)中經(jīng)常遇到的難點問題聂喇,遇到問題時可能會通過 Google 或者 Stac...
    任教主來也閱讀 2,680評論 0 24
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,515評論 25 707
  • 通常,開發(fā)人員所涉及到的事件分發(fā)機制涉及到了如下幾個方法 dispatchTouchEvent(MotionEve...
    械勒的時間閱讀 2,027評論 0 5
  • 什么是View View 是 Android 中所有控件的基類蔚携。 View的位置參數(shù) View 的位置由它的四個頂...
    acc8226閱讀 1,151評論 0 7
  • 周一遙參加學校組織的社會實踐活動希太,玩了滾鐵環(huán)和陀螺,滾鐵環(huán)始終未入其門酝蜒,陀螺倒是會打了誊辉,于是回家后老媽便跟小區(qū)里其...
    好陽光閱讀 871評論 0 2