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