方法一: 通过GestureDetector实现
public class GameView extends GridLayout {
GestureDetector mDetector;
private void initGameView() {
mDetector = new GestureDetector(MyApplication.getContext(), new OnGestureListener() {
static final float FLIP_DISTANCE = 500; // 某一方向上的滑动距离超过此值才是向此方向滑动
...
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
float offsetX = e1.getX() - e2.getX();
float offsetY = e1.getY() - e2.getY();
if (Math.abs(offsetX) > Math.abs(offsetY)) {
// 横坐标方向的偏移值大于纵坐标方向的偏移值 左右滑动
if (offsetX < -FLIP_DISTANCE) {
Log.i(TAG, "向右");
} else {
Log.i(TAG, "向左");
}
} else {
// 横坐标方向的偏移值小于纵坐标方向的偏移值 上下滑动
if (offsetY < -FLIP_DISTANCE) {
Log.i(TAG, "向下");
} else {
Log.i(TAG, "向上");
}
}
return true;
}
});
}
...
@Override
public boolean onTouchEvent(MotionEvent event) {
mDetector.onTouchEvent(event);
return true;
}
}
方法二: 重写ouTouch方法
监听按下和抬起两个事件, 通过这两个事件获得坐标, 计算出偏移量
实现过程略