我正在编写简单的代码来检测所有的手势,如for、滚动等,并打算实现GestureDetector.OnGestureListener接口来覆盖它的方法,但我知道GestureDetector.SimpleOnGestureListener也可以这样做。据我所知,SimpleOnGestureListener是一个实现了OnGestureListener、OnDoubleTapListener和OnContextClickListener接口的类,如果我错了,请更正。
在Android开发者的网页上写着-
如果您只想处理一些手势,可以扩展
GestureDetector.SimpleOnGestureListener,而不是实现GestureDetector.OnGestureListener接口。GestureDetector.SimpleOnGestureListener为所有on<TouchEvent>方法提供了一个实现,方法是为所有方法返回false。因此,您只能覆盖您所关心的方法。例如,下面的代码段创建了一个扩展GestureDetector.SimpleOnGestureListener并覆盖onFling()和onDown()的类。
我有几个问题要问
1)如果我们也可以实现GestureDetector.SimpleOnGestureListener和其他接口,那么为什么还要使用这些方法呢?
( 2) GestureDetector.SimpleOnGestureListener是否相同,无差异?它是用来简化编码的吗?
发布于 2016-06-08 18:45:14
来自GestureDetector.SimpleOnGestureListener的文档
当您只想侦听所有手势的子集时,要扩展的一个方便类。这实现了GestureDetector.OnGestureListener、GestureDetector.OnDoubleTapListener和GestureDetector.OnContextClickListener中的所有方法,但不执行任何操作,并对所有适用的方法返回false。
如果您只想实现其中的几个方法(不是所有方法),那么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;
}
}发布于 2022-02-19 19:44:42
实施应类似于以下几点:
public class MyOnGestureListener implements
GestureOverlayView.OnGestureListener,
GestureDetector.OnDoubleTapListener,
GestureDetector.OnContextClickListener {
@Override public boolean onDoubleTap(MotionEvent event) {return false;}
@Override public boolean onDoubleTapEvent(MotionEvent event) {return false;}
@Override public boolean onSingleTapConfirmed(MotionEvent event) {return false;}
@Override public boolean onContextClick(MotionEvent event) {return false;}
@Override public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {}
@Override public void onGesture(GestureOverlayView overlay, MotionEvent event) {}
@Override public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {}
@Override public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {}
}https://stackoverflow.com/questions/37709883
复制相似问题