因为课程项目里用到了surfaceview并且需要在上面识别安卓的手势。很自然的使用Android提供的gesturedetector手势识别类来完成这个工作,但是却发现无论是双击还是单击屏幕都没有反应,搜索之后找到了解决办法。
先来看原来的代码:
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// 屏幕的滑动需要自己定义实现
}
else {
// 获得单击和双击事件
mGestureDetector.onTouchEvent(event);
}
return super.onTouchEvent(event);
调试发现onTouchEvent是能够进来的,并且也应该执行到了mGestureDetector.onTouchEvent(event)这条语句,但是依旧没有响应。
http://stackoverflow.com/questions/15341736/android-gesturedetector-with-simpleongesturelistener-within-surfaceview 这个网址解释了原因。大体上就是因为surfaceview对于ACTION_UP事件默认没有接收到,就是上面的返回语句返回了false,那么我们就直接改成返回true就好了
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// 屏幕的滑动需要自己定义实现
}
else {
// 获得单击和双击事件
mGestureDetector.onTouchEvent(event);
}
//return super.onTouchEvent(event);
// 这里一定要返回true!
return true;
}