成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Android編程下Touch事件的分發(fā)和消費(fèi)機(jī)制理解是怎樣的

Android編程下Touch事件的分發(fā)和消費(fèi)機(jī)制理解是怎樣的,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

在海門等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),海門網(wǎng)站建設(shè)費(fèi)用合理。

Android 中與 Touch 事件相關(guān)的方法包括:dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev);能夠響應(yīng)這些方法的控件包括:ViewGroup 及其子類、Activity。方法與控件的對(duì)應(yīng)關(guān)系如下表所示:

Touch 事件相關(guān)方法  方法功能  
  ViewGroup   
     Activity     
  public boolean dispatchTouchEvent(MotionEvent ev)事件分發(fā) 
 Yes Yes
  public boolean onInterceptTouchEvent(MotionEvent ev)  
事件攔截 
 Yes No
  public boolean onTouchEvent(MotionEvent ev)事件響應(yīng) 
 Yes Yes

從這張表中我們可以看到 ViewGroup 及其子類對(duì)與 Touch 事件相關(guān)的三個(gè)方法均能響應(yīng),而 Activity 對(duì) onInterceptTouchEvent(MotionEvent ev) 也就是事件攔截不進(jìn)行響應(yīng)。另外需要注意的是 View 對(duì) dispatchTouchEvent(MotionEvent ev) 和 onInterceptTouchEvent(MotionEvent ev) 的響應(yīng)的前提是可以向該 View 中添加子 View,如果當(dāng)前的 View 已經(jīng)是一個(gè)最小的單元 View(比如 TextView),那么就無法向這個(gè)最小 View 中添加子 View,也就無法向子 View 進(jìn)行事件的分發(fā)和攔截,所以它沒有dispatchTouchEvent(MotionEvent ev) 和 onInterceptTouchEvent(MotionEvent ev),只有 onTouchEvent(MotionEvent ev)。

一、Touch 事件分析

 事件分發(fā):public boolean dispatchTouchEvent(MotionEvent ev)

Touch 事件發(fā)生時(shí) Activity 的 dispatchTouchEvent(MotionEvent ev) 方法會(huì)以隧道方式(從根元素依次往下傳遞直到最內(nèi)層子元素或在中間某一元素中由于某一條件停止傳遞)將事件傳遞給最外層 View 的 dispatchTouchEvent(MotionEvent ev) 方法,并由該 View 的 dispatchTouchEvent(MotionEvent ev) 方法對(duì)事件進(jìn)行分發(fā)。dispatchTouchEvent 的事件分發(fā)邏輯如下:

  • 如果 return true,事件會(huì)分發(fā)給當(dāng)前 View 并由 dispatchTouchEvent 方法進(jìn)行消費(fèi),同時(shí)事件會(huì)停止向下傳遞;

  • 如果 return false,事件分發(fā)分為兩種情況:

  1. 如果當(dāng)前 View 獲取的事件直接來自 Activity,則會(huì)將事件返回給 Activity 的 onTouchEvent 進(jìn)行消費(fèi);

  2. 如果當(dāng)前 View 獲取的事件來自外層父控件,則會(huì)將事件返回給父 View 的  onTouchEvent 進(jìn)行消費(fèi)。

  • 如果返回系統(tǒng)默認(rèn)的 super.dispatchTouchEvent(ev),事件會(huì)自動(dòng)的分發(fā)給當(dāng)前 View 的 onInterceptTouchEvent 方法。

 事件攔截:public boolean onInterceptTouchEvent(MotionEvent ev) 

在外層 View 的 dispatchTouchEvent(MotionEvent ev) 方法返回系統(tǒng)默認(rèn)的 super.dispatchTouchEvent(ev) 情況下,事件會(huì)自動(dòng)的分發(fā)給當(dāng)前 View 的 onInterceptTouchEvent 方法。onInterceptTouchEvent 的事件攔截邏輯如下:

  • 如果 onInterceptTouchEvent 返回 true,則表示將事件進(jìn)行攔截,并將攔截到的事件交由當(dāng)前 View 的 onTouchEvent 進(jìn)行處理;

  • 如果 onInterceptTouchEvent 返回 false,則表示將事件放行,當(dāng)前 View 上的事件會(huì)被傳遞到子 View 上,再由子 View 的 dispatchTouchEvent 來開始這個(gè)事件的分發(fā);

  • 如果 onInterceptTouchEvent 返回 super.onInterceptTouchEvent(ev),事件默認(rèn)會(huì)被攔截,并將攔截到的事件交由當(dāng)前 View 的 onTouchEvent 進(jìn)行處理。

 事件響應(yīng):public boolean onTouchEvent(MotionEvent ev)

在 dispatchTouchEvent 返回 super.dispatchTouchEvent(ev) 并且 onInterceptTouchEvent 返回 true 或返回 super.onInterceptTouchEvent(ev) 的情況下 onTouchEvent 會(huì)被調(diào)用。onTouchEvent 的事件響應(yīng)邏輯如下:

  • 如果事件傳遞到當(dāng)前 View 的 onTouchEvent 方法,而該方法返回了 false,那么這個(gè)事件會(huì)從當(dāng)前 View 向上傳遞,并且都是由上層 View 的 onTouchEvent 來接收,如果傳遞到上面的 onTouchEvent 也返回 false,這個(gè)事件就會(huì)“消失”,而且接收不到下一次事件。

  • 如果返回了 true 則會(huì)接收并消費(fèi)該事件。

  • 如果返回 super.onTouchEvent(ev) 默認(rèn)處理事件的邏輯和返回 false 時(shí)相同。

看完上述內(nèi)容,你們掌握Android編程下Touch事件的分發(fā)和消費(fèi)機(jī)制理解是怎樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)頁標(biāo)題:Android編程下Touch事件的分發(fā)和消費(fèi)機(jī)制理解是怎樣的
URL地址:http://jinyejixie.com/article0/possio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、服務(wù)器托管、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)營銷型網(wǎng)站建設(shè)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
延川县| 罗定市| 汾西县| 米脂县| 尤溪县| 祥云县| 武隆县| 祥云县| 遂宁市| 绥阳县| 涪陵区| 大宁县| 米脂县| 庄河市| 剑河县| 乌兰察布市| 肇东市| 延长县| 托克托县| 台中县| 本溪市| 大英县| 伊通| 安义县| 保山市| 涞水县| 繁峙县| 马鞍山市| 西盟| 巴彦县| 丰镇市| 河西区| 佛学| 淮南市| 肥城市| 庐江县| 临沭县| 临朐县| 临安市| 高尔夫| 汉源县|