public class GameView extends SurfaceView implements SurfaceHolder.Callback,
OnGestureListener, OnTouchListener {
private GestureDetector myGD;// 手势识别
private static final int FLING_MIN_VELOCITY = 0;// 最慢移动速度
private float FLING_MIN_DISTANCE = 50;// 最短触摸路径
……
public GameView(GameActivity father) {
…… this.setClickable(true);
this.setLongClickable(true);
this.setOnTouchListener(this);
myGD = new GestureDetector(this);
myGD.setIsLongpressEnabled(true);
} @Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return myGD.onTouchEvent(event);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
// 向左滑动
if ((e1.getX() - e2.getX()) > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
Log.i("gesture", "onFling-Left"); }
// 向右滑动
else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
Log.i("gesture", "onFling-Right");
}
// 向下滑动
else if (e2.getY() - e1.getY() > this.FLING_MIN_DISTANCE
&& Math.abs(velocityY) > FLING_MIN_VELOCITY) {
Log.i("gesture", "onFling-DOWN");
}
return false;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
Log.i("gesture", "onSingleTapUp");
return false;
} @Override
public boolean onDown(MotionEvent event) {
// TODO Auto-generated method stub
Log.i("gesture", "onDown");
return false;
} @Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
Log.i("gesture", "onScroll");
return false;
} @Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
Log.i("gesture", "onShowPress");
} @Override
public void onLongPress(MotionEvent event) {
// TODO Auto-generated method stub
Log.i("gesture", "onLongPress"); }
}
代码如上,不管怎么按,都是先执行onDown(),抬起手后执行onSingleTapUp(),或者onDown()->onScroll(),或者onDown()->onScroll()->onFling()*。不会执行onShowPress()或者onLongPress()。
如何才能让它区别并执行onSingleTapUp(),onFling(),onLongPress()这三种手势呢?手势识别onLongPress