Android开发 - GestureDetector.OnGestureListener或GestureDetector.SimpleOnGestureListener

时间:2016-06-08 18:11:03

标签: java android-studio android-event android-gesture

我正在研究简单的代码来检测所有的手势,比如fling,scroll等,并且要实现接口GestureDetector.OnGestureListener来覆盖它的方法,但我知道同样可以用GestureDetector.SimpleOnGestureListener。据我所知,SimpleOnGestureListener是一个已实施OnGestureListenerOnDoubleTapListenerOnContextClickListener接口的类,如果我错了,请纠正我。

在Android Developer网站页面上写了 -

  

如果您只想处理几个手势,可以延长   GestureDetector.SimpleOnGestureListener而不是实施   GestureDetector.OnGestureListener界面。

     

GestureDetector.SimpleOnGestureListener提供了一种实现方式   对于所有on<TouchEvent>方法,通过为所有方法返回false   他们。因此,您只能覆盖您关心的方法。对于   例如,下面的代码片段创建了一个扩展的类   GestureDetector.SimpleOnGestureListener并覆盖onFling()   和onDown()

我这里有几个问题,

1)如果我们可以实现GestureDetector.SimpleOnGestureListener和其他接口来使用这些方法,为什么要使用GestureDetector.OnGestureListener

2)GestureDetector.SimpleOnGestureListener是否相同而没有区别?它是为了简化编码?

1 个答案:

答案 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;
    }
}