网络上面有不少关于这方面的介绍:
http://wayfarer.javaeye.com/blog/460284
http://goro.javaeye.com/blog/402163
http://www.williamhua.com/2009/04/23/android-touchscreen-gesture-recogniton/
上面的介绍还是挺详细的,总结一下:
onGestureListener得和onTouchListener配合使用,因为只有onTouchListener才是实际的监听到用户的 触摸,他把他所有监听到的用户触摸通知"手势识别"类对象,手势识别类对象处理后触发对应的函数,例如onFling, onLongPress等等。
这里总结我这两天遇到的问题和这些问题的解决方法
1. 快速tap屏幕后,手势识别给出三个事件: down, press, longpress ,这明显是不合理的
这个问题有两个解决办法。
a> 修改下面的代码,return true
这个方法同样也可以解决一般触摸屏事件的冲突问题,例如click和LongPress,在处理这个事件后,需要允许后继事件。
@Override
public
boolean
onDown(MotionEvent e) {
Log.d("Gesture"
, " onDown "
+ " x:"
+ e.getX() + " y:"
+ e.getY());
return
false
;
}
b> 设置当前的view
this
.setLongClickable(true
);
2.长按后滑动无效
GestureDetector默认是打开LongPress通知的,但是有个问题,长按后,手不离开屏幕且滑动,这个时候发现没有滑动事件。
而在monolith的HomeScreen中,需要的正是长按之后的滑动,长按不需要。
这个问题的解决办法是设置手势识别对象,禁止产生长按事件
mGestureDetector.setIsLongpressEnabled(false
);
当然,没有禁用长按事件,滑动事件还是有效的,只是要确保触屏后马上滑动,不要等系统产生了长按。