成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Android學(xué)習(xí)之Touch事件的處理

Anonymous1 / 923人閱讀

摘要:解釋如果某個控件或容器消費了事件,則與該事件相關(guān)的后續(xù)事件者會派發(fā)給該控件或容器進(jìn)行處理。一般情況下以下三種情況的事件全部由方法處理,只是三種情況中的動作值不同。作用將觸摸事件向下層的或派發(fā)。作用表示抬起的狀態(tài)。

這是一篇老文章,移到我的新博客中,沒看過的,可以看看。

在移動開發(fā)過程當(dāng)中,我們經(jīng)常會遇到手勢處理和事件觸摸的情況,如果不了解整個事件的處理機制,對于開發(fā)的同學(xué)和碼農(nóng)是非常痛苦的,但是事件觸摸的處理確實是一個非常復(fù)雜的過程,細(xì)講起來,估計我都能講迷糊,這里呢,我只做一些簡單的和常用事件的講解,希望能夠幫助大家。

概念,什么是事件的派發(fā)

事件的派發(fā)簡單來講就是Activity將事件派發(fā)給容器和控件,容器或控件將事件進(jìn)一步派發(fā)給其子容器和子控件,直到事件最終派發(fā)到事件發(fā)生的焦點控件上。

常用的事件觸摸方法

我想對于這些常用的事件觸摸方法大家都應(yīng)該有一定的了解,或者熟悉,那就是onTouchEvent()和dispatchTouchEvent(),OnInterceptTouchEvent(),看到方法后,相信你很快就會說,對我用過,但是具體的意思沒有搞清楚,看別人這么說的,別人這么用的,我就跟著這么用的,用之前,對于這些方法我們一定要搞清其作用,這樣才能在做起來有的放矢?,F(xiàn)在我們就來介紹一下這三種方法的大概用法和作用。

Boolean onTouchEvent()

作用:處理本次觸摸事件。

解釋:如果某個控件或容器消費了touch事件,則與該touch事件相關(guān)的后續(xù)touch事件者會派發(fā)給該控件或容器進(jìn)行處理。

返回值:該方法的返回值機理與鍵盤響應(yīng)事件的相同,同樣是當(dāng)已經(jīng)完整地處理了該事件且不希望其他回調(diào)方法再次處理時返回true,否則返回false。

一般情況下以下三種情況的事件全部由onTouchEvent方法處理,只是三種情況中的動作值不同。

屏幕被按下:當(dāng)屏幕被按下時,會自動調(diào)用該方法來處理事件,此時MotionEvent.getAction()的值為MotionEvent.ACTION_DOWN,如果在應(yīng)用程序中需要處理屏幕被按下的事件,只需重新該回調(diào)方法,然后在方法中進(jìn)行動作的判斷即可。

屏幕被抬起:當(dāng)觸控筆離開屏幕時觸發(fā)的事件,該事件同樣需要onTouchEvent方法來捕捉,然后在方法中進(jìn)行動作判斷。當(dāng)MotionEvent.getAction()的值為MotionEvent.ACTION_UP時,表示是屏幕被抬起的事件。

在屏幕中拖動:該方法還負(fù)責(zé)處理觸控筆在屏幕上滑動的事件,同樣是調(diào)用MotionEvent.getAction()方法來判斷動作值是否為MotionEvent.ACTION_MOVE再進(jìn)行處理。

Boolean OnInterceptTouchEvent()

作用:是否攔截觸摸事件,true表示攔截,faIse表示不攔截。

解釋:onInterceptTouchEvent這個事件是從父控件開始往子控件傳的,直到有攔截或者到?jīng)]有這個事件的view,然后就往回從子到父控件,(類似于預(yù)處理,當(dāng)然也可以不處理)并改變事件的傳遞方向,也就是決定是否允許Touch事件繼續(xù)向下(子控件)傳遞,一但返回True(代表事件在當(dāng)前的viewGroup中會被處理),則向下傳遞之路被截斷(所有子控件將沒有機會參與Touch事件),同時把事件傳遞給當(dāng)前的控件的onTouchEvent()處理;返回false,則把事件交給子控件的onInterceptTouchEvent()。

void dispatchTouchEvent()

作用:將觸摸事件向下層的ViewGroup或View派發(fā)。

解釋:當(dāng)TouchEvent發(fā)生時,首先Activity將TouchEvent傳遞給最頂層的View, TouchEvent最先到達(dá)最頂層 view 的 dispatchTouchEvent ,然后由 dispatchTouchEvent 方法進(jìn)行分發(fā),如果dispatchTouchEvent返回true ,則交給這個view的onTouchEvent處理,如果dispatchTouchEvent返回 false ,則交給這個 view 的 interceptTouchEvent 方法來決定是否要攔截這個事件,如果 interceptTouchEvent 返回 true ,也就是攔截掉了,則交給它的 onTouchEvent 來處理,如果 interceptTouchEvent 返回 false ,那么就傳遞給子 view ,由子 view 的 dispatchTouchEvent 再來開始這個事件的分發(fā)。如果事件傳遞到某一層的子 view 的 onTouchEvent 上了,這個方法返回了 false ,那么這個事件會從這個 view 往上傳遞,都是 onTouchEvent 來接收。而如果傳遞到最上面的 onTouchEvent 也返回 false 的話,這個事件就會“消失”,而且接收不到下一次事件。

我們常用的ACTION常量
public static final int ACTION_DOWN=0
作用:表示按下的狀態(tài)。

public static final int ACTION_ UP=1
作用:表示抬起的狀態(tài)。

public static final int ACTION_MOVE=2
作用:表示移動的狀態(tài)。
特別注意
ViewGroup里的onInterceptTouchEvent默認(rèn)值是false這樣才能把事件傳給View里的onTouchEvent.

ViewGroup里的onTouchEvent默認(rèn)值是false。

View里的onTouchEvent返回默認(rèn)值是true.這樣才能執(zhí)行多次touch事件

移動開發(fā)者的聚集地,公眾號“非著名程序員”,每天一篇原創(chuàng)技術(shù)分享和移動互聯(lián)網(wǎng)知識分享,微信公眾號:smart_android,頭條號和百度百家賬號都是“非著名程序員”。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65902.html

相關(guān)文章

  • Docker學(xué)習(xí)之Dockerfile 構(gòu)建鏡像(3)

    摘要:我們可以了解到,鏡像的定制實際上就是定制每一層所添加的配置文件。指令之指令的目的就是來指定基礎(chǔ)鏡像。指令之指令是用來執(zhí)行命令行命令的。由于命令行的強大能力,指令在定制鏡像時是最常用的指令之一。構(gòu)建鏡像這里我們使用了命令進(jìn)行鏡像構(gòu)建。 我們可以了解到,鏡像的定制實際上就是定制每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、構(gòu)建、操作的命令都寫入一個腳本,用這個腳本來構(gòu)建、定制鏡...

    Lavender 評論0 收藏0
  • NodeAPI學(xué)習(xí)之Stream

    摘要:回調(diào)函數(shù)將接收到一個對象。要禁止這一默認(rèn)行為,選項應(yīng)該指定為。一般來說,建議開發(fā)人員避免使用事件和方法,使用或事件代替。事件在寫入數(shù)據(jù)出錯或者使用管道出錯時觸發(fā),事件發(fā)生時,回調(diào)函數(shù)僅會接收到一個參數(shù)。注意事件發(fā)生時,流并不會關(guān)閉。 Stream 流可以是可讀的、可寫的、或者是可讀寫的。所有的流都是EventEmitter的實例。 對象模式 所有使用Node.js API創(chuàng)建的流對象都...

    laznrbfe 評論0 收藏0
  • React學(xué)習(xí)之認(rèn)識Flux架構(gòu)模式

    摘要:是用戶建立客戶端應(yīng)用的前端架構(gòu),它通過利用一個單向的數(shù)據(jù)流補充了的組合視圖組件,這更是一種模式而非正式框架,你能夠無需許多新代碼情況下立即開始使用。結(jié)構(gòu)和數(shù)據(jù)流一個單向數(shù)據(jù)流是模式的核心。 Flux是Facebook用戶建立客戶端Web應(yīng)用的前端架構(gòu),它通過利用一個單向的數(shù)據(jù)流補充了React的組合視圖組件,這更是一種模式而非正式框架,你能夠無需許多新代碼情況下立即開始使用Flux。 ...

    EasonTyler 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<