Android對於手勢的檢測提供了一系列的API,其中包括對於手勢檢測的監聽器、對於手勢識別的API等等。
本篇主要介紹手勢檢測監聽器GestureDetector類的基本使用。
Android爲手勢檢測提供了一個GestureDetector類,GestureDetector實例代表了一個手勢檢測器。
GestureDetector這個類對外提供了兩個接口和一個外部類,其中包括:
接口:OnGestureListener,OnDoubleTapListener
內部類:SimpleOnGestureListener
對於OnGestureListener基本使用:
首先在MainActivity中定義我們的手勢監聽器,並讓當前的Activity來實現監聽接口:
//定義手勢監聽器
GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gestureDetector=new GestureDetector(this,this);
}
實現接口中的回調方法:
//當手指按下的時候觸發下面的方法
@Override
public boolean onDown(MotionEvent e) {
System.out.println("onDown");
return false;
}
//當用戶手指在屏幕上按下,而且還未移動和鬆開的時候觸發這個方法
@Override
public void onShowPress(MotionEvent e) {
System.out.println("onShowPress");
}
//當手指在屏幕上輕輕點擊的時候觸發下面的方法
@Override
public boolean onSingleTapUp(MotionEvent e) {
System.out.println("onSingleTapUp");
return false;
}
//當手指在屏幕上滾動的時候觸發這個方法
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
System.out.println("onScroll");
return false;
}
//當用戶手指在屏幕上長按的時候觸發下面的方法
@Override
public void onLongPress(MotionEvent e) {
System.out.println("onLongPress");
}
//當用戶的手指在觸摸屏上拖過的時候觸發下面的方法,velocityX代表橫向上的速度,velocityY代表縱向上的速度
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
System.out.println("onFling");
return false;
}
最後將Activity中的OnTouchEvent事件交給手勢監聽器處理:
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
對於OnDoubleTapListener基本使用:
同樣的讓MainActivity也實現OnDoubleTapListener接口。
public class MainActivity extends Activity implements OnGestureListener,OnDoubleTapListener
實現對應的抽象方法:
//當手機屏幕接收到單擊事件,也就是當手指在點擊了手機屏幕之後在一定時間內沒有接受到第二次的單擊事件時觸發下面的方法
//當如果手機接收到的是雙擊事件,在每次雙擊的第一次的點擊的時候會唯一的觸發下面的方法
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
System.out.println("onSingleTapConfirmed");
return false;
}
//當系統接受到雙擊事件的時候會在兩次點擊之間觸發一次下面的方法
@Override
public boolean onDoubleTap(MotionEvent e) {
System.out.println("onDoubleTap");
return false;
}
//當系統接收到雙擊事件的時候,在每一次的結束觸發下面的方法一次
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
System.out.println("onDoubleTapEvent");
return false;
}
同樣要將具體的觸摸事件交由GestureDetector檢測器來處理。
下面簡要介紹一下SimpleOnGestureListener,此類用法非常簡單。首先我們可以看到對於實現兩個接口來實現事件的監聽回調的方式來處理用戶的手勢,我們都需要強制重寫多個抽象方法,然而我們可能不需要這麼多。SimpleOnGestureListener實現了兩個接口,但是對於所有的抽象方法的實現都是空的,當我們需要實現特定的幾個方法的時候我們就可以繼承此類而不是實現接口了。