在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這個方法