我正在研究简单的代码来检测所有的手势,比如fling,scroll等,并且要实现接口GestureDetector.OnGestureListener
来覆盖它的方法,但我知道同样可以用GestureDetector.SimpleOnGestureListener
。据我所知,SimpleOnGestureListener
是一个已实施OnGestureListener
,OnDoubleTapListener
和OnContextClickListener
接口的类,如果我错了,请纠正我。
在Android Developer网站页面上写了 -
如果您只想处理几个手势,可以延长
GestureDetector.SimpleOnGestureListener
而不是实施GestureDetector.OnGestureListener
界面。
GestureDetector.SimpleOnGestureListener
提供了一种实现方式 对于所有on<TouchEvent>
方法,通过为所有方法返回false 他们。因此,您只能覆盖您关心的方法。对于 例如,下面的代码片段创建了一个扩展的类GestureDetector.SimpleOnGestureListener
并覆盖onFling()
和onDown()
。
我这里有几个问题,
1)如果我们可以实现GestureDetector.SimpleOnGestureListener
和其他接口来使用这些方法,为什么要使用GestureDetector.OnGestureListener
?
2)GestureDetector.SimpleOnGestureListener
是否相同而没有区别?它是为了简化编码?
答案 0 :(得分:3)
来自GestureDetector.SimpleOnGestureListener
的文档当你只想听一个便利课时 所有手势的子集。这实现了所有方法 GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener,和 GestureDetector.OnContextClickListener但什么都不做并返回 所有适用方法均为假。
如果您只想实现一些方法(并非所有方法)SimpleOnGestureListener
具有什么都不做的默认实现。这可以防止您的代码被多个不执行任何操作的方法弄得乱七八糟。从功能的角度来看,使用SimpleOnGestureListener
或直接实现接口并不重要。
源代码
public static class SimpleOnGestureListener implements OnGestureListener, OnDoubleTapListener,
OnContextClickListener {
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
public void onLongPress(MotionEvent e) {
}
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
return false;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
return false;
}
public void onShowPress(MotionEvent e) {
}
public boolean onDown(MotionEvent e) {
return false;
}
public boolean onDoubleTap(MotionEvent e) {
return false;
}
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
public boolean onSingleTapConfirmed(MotionEvent e) {
return false;
}
public boolean onContextClick(MotionEvent e) {
return false;
}
}