Android中Touch事件的處理

2021-08-26 19:43:31 字數 1471 閱讀 1077

最近和隊友做了個微博傳送助手fuubo(

由於主要是做前台,所以當中碰到了很多蛋疼的東西,做過android的人都知道前台是android的硬傷,在

android應用層做得很好的人前台功底都是很強的,這裡就我對處理前台動畫時對android的touch事件

的一些體會心得給大家分享下,如果有錯誤的地方希望大家提出.

android的四大元件中activity我們可以認為是android中的容器,在它裡面你可以裝很多的view,然後 協

助view將我們希望看到的介面顯示出來.下面主要借助touch事件中主要的幾個函式說下當一次touch事

件到來的時候android框架到底做了哪些事情.

方法,開始第一次遍歷,從而算出每乙個view的大小,接著進行第二次遍歷,遞迴呼叫子view的onlayout方 法

,從而算出每乙個view的位置資訊,第三次遍歷就很明顯了,利用前面已經計算出來的大小和位置資訊, 遞迴

呼叫每個view的ondraw方法,將各自畫出來.現在繼續回到touch事件的幾個函式上來.

1.dispatchtouchevent:當一次touch事件到來的時候,事件從activity中流出,最上層的view中的dispatch函式得

到了事件的處理權,它如果返回true即代表自己要處理這個事件,那麼事件將不會往下傳,而是繼續等待下 一次

事件的到來,如果返回false則代表自己想分配給其他函式來處理,此時該view的

intercepttouchevnet

函式將會

獲得事件處理權.

2.intercepttouchevnet:事件流出到該函式的時候,我們同樣有兩種選擇,如果返回true則告訴系統自己想處理

這次事件,那麼事件將交給ontouchevent函式處理;如果我們返回false的話則代表我們想將事件交給下層

view來

處理,此時事件會流出給下一層view的

dispatchtouchevent,並進入遞迴

3.ontouchevent:事件來到此函式的時候,一樣的我們可以返回true,表示自己想處理這個事件,並處理這個事件,同

時等待下一次事件到來,如果返回false,我們要分情況來看,如果是上層的view則會將該次事件丟棄,

想處理這次事件,如果是下層view的話,事件將會冒泡向上傳.

相信聽到這裡可能有點暈了,因為最近比較忙,就沒有貼測試**了,不過為了讓大家有乙個清晰的印象,

貼一張圖出來

這裡還要說幾句的是:

1.每一次觸屏事件都是從down開始的時候,如果down事件你沒有處理權的話,後面的move,up等事件

你也不會有許可權去處理

2.在預設情況下,android盡量讓最下層的view去處理touch事件,之後才會慢慢冒泡去讓上層view處理

如果大家想看官方解說,可以到這裡看

touch事件分析

事件分發 public boolean dispatchtouchevent motionevent ev touch 事件發生時 activity 的 dispatchtouchevent motionevent ev 方法會以隧道方式 從根元素依次往下傳遞直到最內層子元素或在中間某一元素中由於某...

touch事件傳遞

首先設計到下面4個方法 先後順數也是這麼執行的,dispatchtouchevent 分發 onintercepttouchevent 攔截 ontouch 觸控 ontouchevent 觸控事件 1 首先講述一下 ontouch ontouchevent 的區別 ontouch 是 view o...

touch事件應用

js的touch事件,一般用於移動端的觸屏滑動 function function touch event touchstart 當手指觸控螢幕時觸發 即使已經有乙個手指放在了螢幕上也會觸發。touchmove 當手指在螢幕上滑動時連續的觸發。在這個事件發生期間,呼叫preventdefault 可...