在android SDK 自带的sample snake,只能通过上下左右方向键控制贪吃蛇的方向,
模拟器上玩没有问题,装到手机后基本玩不了,本着自己丰衣足食的精神,做了点小小的改动,
通过手机屏滑动来控制方向,
主要涉及的类public GestureDetector (GestureDetector.OnGestureListener listener),是一个触摸手势识别类,
在绑定的监听器listener需要实现GestureDetector.OnGestureListener接口中的一些方法,这里我们主要是实现
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY)方法
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
Log.d("TAG", "onFling");
System.out.println("onFling");
if(Math.abs(e1.getY()-e2.getY())>Math.abs(e1.getX()-e2.getX()))//取绝对值来判断是水平滑动还是垂直滑动
{
if(e1.getY()>e2.getY())
{
System.out.println("up");
mSnakeView.onKeyDown(KeyEvent.KEYCODE_DPAD_UP, null);
}
else
{
System.out.println("down");
mSnakeView.onKeyDown(KeyEvent.KEYCODE_DPAD_DOWN, null);
}
}
else
{
if(e1.getX()>e2.getX())
{
System.out.println("lef");
mSnakeView.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);
}
else if(e1.getX()<e2.getX())
{
System.out.println("right");
mSnakeView.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
}
}
return false;
}
其次我们要在在mSnakeView上添加一个OnTouchListener监听器,即mSnakeView.setOnTouchListener(OnTouchListener l)
要实现OnTouchListener接口中的
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gesturedetector.onTouchEvent(event);
}
完成以上后基本的工作就完成了,软件安装到手机后,还是无法识别滑动手势,很是苦恼,后发现少了点东西,
mSnakeView.setLongClickable(true);
这个一定得加上,不然不会调用onFling这个方法