?
このドキュメントでは、 php中國(guó)語(yǔ)ネットマニュアル リリース
GestureDetector
版本:Android 2.3 r1
?
結(jié)構(gòu)
繼承關(guān)系
public class GestureDetector extends Object
????????
java.lang.Object
android.view.GestureDetector
?
類概述
通過(guò)系統(tǒng)提供的MotionEvent
來(lái)監(jiān)測(cè)各種手勢(shì)和(觸摸)事件。當(dāng)一個(gè)指定的手勢(shì)事件發(fā)生時(shí),GestureDetector.OnGestureListener
回調(diào)函數(shù)將通告用戶。這個(gè)類僅僅處理由觸摸引發(fā)的MotionEvent
(不能處理由軌跡球引發(fā)的事件)。要使用這個(gè)類需執(zhí)行以下操作:
l?? 為你的View
建立一個(gè)GestureDetector實(shí)例。
l?? 在View的onTouchEvent(MotionEvent)方法里確保調(diào)用(GestureDetector的)onTouchEvent(MotionEvent)方法。當(dāng)相關(guān)事件發(fā)生時(shí),定義在回調(diào)函數(shù)里的方法將被執(zhí)行。
?
嵌套類?
interface ???????? GestureDetector.OnDoubleTapListener
雙擊和輕擊(confirmed single-tap)事件的監(jiān)聽(tīng)器。(譯者注:confirmed single-tap是用戶快速點(diǎn)一下觸摸屏所引發(fā)的動(dòng)作。區(qū)分下面兩種情況:
1.?????? 手指按下,停留0.2秒(估計(jì)值)以上再抬起時(shí),不算confirmed single-tap
2.?????? 快速點(diǎn)擊屏幕兩次不會(huì)引發(fā)兩次confirmed single-tap事件,而是引發(fā)一次DoubleTap事件。)
?
interface ???????? GestureDetector.OnGestureListener
在有手勢(shì)動(dòng)作發(fā)生時(shí),通知的監(jiān)聽(tīng)器
?
class ?????? GestureDetector.SimpleOnGestureListener ????????
當(dāng)只需要監(jiān)聽(tīng)部分手勢(shì)時(shí),用于擴(kuò)展的便捷類
?
構(gòu)造函數(shù)
public GestureDetector (GestureDetector.OnGestureListener listener, Handler handler)
已棄用,替代方法:
GestureDetector(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler)
通過(guò)提供的監(jiān)聽(tīng)器來(lái)創(chuàng)建一個(gè)GestureDetector,這個(gè)構(gòu)造函數(shù)只能用于非UI線程(因?yàn)樗试S指定一個(gè)handler)。
參數(shù)
???????? listener? 用于觸發(fā)所有回調(diào)函數(shù)的監(jiān)聽(tīng)器,不能為空
handler? 需要使用到的handler
異常
???????? NullPointerException?? Listener或者handler為空時(shí)
?
public GestureDetector (GestureDetector.OnGestureListener listener)
已棄用,替代方法:
GestureDetector(android.content.Context, android.view.GestureDetector.OnGestureListener)
通過(guò)提供的監(jiān)聽(tīng)器來(lái)創(chuàng)建一個(gè)GestureDetector。你只能于UI線程里使用這個(gè)構(gòu)造函數(shù)(這是通常的情況)
參數(shù)
???????? listener??? 用于觸發(fā)所有回調(diào)函數(shù)的監(jiān)聽(tīng)器,不能為空
異常
??? NullPointerException?? 如果Listener為空
參見(jiàn)
??? Handler()
?
public GestureDetector (Context context, GestureDetector.OnGestureListener listener)
通過(guò)提供的監(jiān)聽(tīng)器來(lái)創(chuàng)建一個(gè)GestureDetector。(通常情況下)你只能于UI線程里使用這個(gè)構(gòu)造函數(shù)
???????? 參數(shù)
?????????????????? context??? 應(yīng)用程序上下文
listener??? 用于觸發(fā)所有回調(diào)函數(shù)的監(jiān)聽(tīng)器,不能為空
???????? ???????? 異常
?????????? NullPointerException?? 如果Listener為空
參見(jiàn)
?????? Handler()
?
public GestureDetector (Context context, GestureDetector.OnGestureListener listener, Handler handler)
通過(guò)提供的監(jiān)聽(tīng)器來(lái)創(chuàng)建一個(gè)GestureDetector. (通常情況下)你只能于UI線程里使用這個(gè)構(gòu)造函數(shù)
???????? 參數(shù)
context??? 應(yīng)用程序上下文
listener??? 用于觸發(fā)所有回調(diào)函數(shù)的監(jiān)聽(tīng)器,不能為空
handler??? 需要使用到的handler
?????????????????? 異常
?????????? NullPointerException?????? 如果Listener為空
參見(jiàn)
?????? Handler()
?
public GestureDetector (Context context, GestureDetector.OnGestureListener listener, Handler handler, boolean ignoreMultitouch)
通過(guò)提供的監(jiān)聽(tīng)器來(lái)創(chuàng)建一個(gè)GestureDetector. (通常情況下)你只能于UI線程里使用這個(gè)構(gòu)造函數(shù)
???????? 參數(shù)
context??? 應(yīng)用程序上下文
listener??? 用于觸發(fā)所有回調(diào)函數(shù)的監(jiān)聽(tīng)器,不能為空
handler??? 需要使用到的handler
ignoreMultitouch???? 是否忽視多點(diǎn)觸控(譯者注:僅適用于2.2以上的android版本,如果沒(méi)設(shè)置這個(gè)參數(shù)(即使用的是上一個(gè)構(gòu)造函數(shù)),則會(huì)忽視多點(diǎn)觸控
,由于網(wǎng)上都沒(méi)有在GestureDetector傳入handler的例子,所以我也不明白這里的handler的具體用意。如果有需要深入理解的朋友,請(qǐng)參照GestureDetector的源碼
?????????????????? 異常
?????????? NullPointerException?????? 如果Listener為空
參見(jiàn)
?????? Handler()
?
公共方法
public boolean isLongpressEnabled ()
返回值
如果允許長(zhǎng)按事件,則返回true,否則為false
?
public boolean onTouchEvent (MotionEvent ev)
分析指定的動(dòng)作事件,如何滿足條件,就觸發(fā)在GestureDetector.OnGestureListener
中提供的回調(diào)函數(shù)
???????? 參數(shù)
?????????????????? ev???? 當(dāng)前的觸摸事件(譯者注:如MotionEvent_DOWN, MotionEvent_UP)
???????? 返回值
?????????????????? 如果GestureDetector.OnGestureListener
消耗了這個(gè)事件,則返回true,否則返回false
?
public void setIsLongpressEnabled (boolean isLongpressEnabled)
設(shè)置是否啟用長(zhǎng)按。如果啟用長(zhǎng)按,當(dāng)用戶按下并保持按下?tīng)顟B(tài)時(shí),將收到一個(gè)長(zhǎng)按事件,同時(shí)不再接收其它事件;如果禁用長(zhǎng)按,當(dāng)用戶按下并保持按下?tīng)顟B(tài)然后再移動(dòng)手指時(shí),將會(huì)接收到scroll事件。長(zhǎng)按默認(rèn)為啟用。
???????? 參數(shù)
?????????????????? isLongpressEnabled???????? ???????? 是否啟用接收長(zhǎng)按事件
?
public void setOnDoubleTapListener (GestureDetector.OnDoubleTapListener onDoubleTapListener)
設(shè)置雙擊及其相關(guān)手勢(shì)的監(jiān)聽(tīng)器
???????? 參數(shù)
?????????????????? onDoubleTapListener?????? 觸發(fā)所有回調(diào)函數(shù)的監(jiān)聽(tīng)器,或者設(shè)為null以停止監(jiān)聽(tīng)雙擊的手勢(shì)
?
補(bǔ)充
文章鏈接
GestureDetector手勢(shì)識(shí)別類 - 進(jìn)階篇
android GestureDetector使用
GestureDetector和SimpleOnGestureListener的使用教程