GestureDetector
手勢檢查,用于輔助檢查用戶的單擊、滑動、長按、雙擊等行為。
首先,需要創(chuàng)建一個GestureDetector對象并實(shí)現(xiàn)OnGestureListener的接口,如下代碼塊所示:
GestureDetector gestureDetector = new GestureDetector(this,new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
Log.d(TAG, "onDown: 手指輕輕觸摸屏幕的一瞬間");
return false;
}
@Override
public void onShowPress(MotionEvent e) {
Log.d(TAG, "onShowPress: 手指輕輕觸摸屏幕,尚未松開或拖動");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.d(TAG, "onSingleTapUp: 手指松開");
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.d(TAG, "onScroll: 手指按下屏幕并拖動");
Log.d(TAG, "onScroll: "+distanceX);
Log.d(TAG, "onScroll: "+distanceX);
return false;
}
@Override
public void onLongPress(MotionEvent e) {
Log.d(TAG, "onLongPress: 長按");
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.d(TAG, "onFling: 按下屏幕,快速滑動后松開");
return false;
}
});
//解決長按屏幕后無法拖動的現(xiàn)象
gestureDetector .setIsLongpressEnabled(false);
手勢監(jiān)聽的過程有了,但是我們還需要去接管目標(biāo)View的onTouchEvent方法,在待監(jiān)聽View的onTouchEvent方法中添加如下代碼:
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
實(shí)際開發(fā)過程中,可以不適用GestureDetector,完全可以在View 的onTouchEvent方法中實(shí)現(xiàn)所需監(jiān)聽,這個根據(jù)個人喜好而定。
tips:如果只是監(jiān)聽滑動相關(guān)的,建議在onTouchEvent中實(shí)現(xiàn),如果需要監(jiān)聽雙擊這種行為的話,就適用GestureDetector。