GestureDetector是android项目中用于处理手势的类,它的介绍和用法网上资料一大堆,我这边就不说明了。今天写这个文章主要是记录一下使用过程中的一个坑,下面进入正题:
网上很多资料教我们的用法如下:
public class MyGestureDetector extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onDown(MotionEvent e) {
Log.d(TAG, "onDown");
return false;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.d(TAG, "onSingleTapUp");
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.d(TAG, "onSingleTapConfirmed");
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.d(TAG, "onDoubleTap");
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Log.d(TAG, "onDoubleTapEvent");
return true;
}
}
mGestureDetector = new GestureDetector(this, new MyGestureDetector());
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return mGestureDetector.onTouchEvent(motionEvent);
}
});
上面是在一个Activity里的使用代码片段,然而发现除了onDown(MotionEvent e)会回调以外,其他方法都不会回调,而如果重写Activity的onTouchEvent方法,如下:
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
这样MyGestureDetector 里的方法都会回调了。问题就出在单独给控件设置setOnTouchListener监听的时候onTouch的回调,不能直接返回mGestureDetector.onTouchEvent(motionEvent),而应该像下面这样写:
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
mGestureDetector.onTouchEvent(motionEvent);
return true;
}
});
好了,这是个比较简单的小问题,只是写下来记录一下。