【问题标题】:Android Development - GestureDetector.OnGestureListener or GestureDetector.SimpleOnGestureListenerAndroid 开发 - GestureDetector.OnGestureListener 或 GestureDetector.SimpleOnGestureListener
【发布时间】:2016-10-09 03:46:51
【问题描述】:

我正在编写简单的代码来检测所有手势,如弹动、滚动等,并打算实现接口GestureDetector.OnGestureListener 以覆盖其方法,但我知道GestureDetector.SimpleOnGestureListener 也可以做到这一点。据我所知,SimpleOnGestureListener 是一个实现了OnGestureListenerOnDoubleTapListenerOnContextClickListener 接口的类,如果我错了,请纠正我。

在 Android 开发者网站页面上是这样写的 -

如果你只想处理几个手势,你可以扩展 GestureDetector.SimpleOnGestureListener 而不是实现 GestureDetector.OnGestureListener 接口。

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

我有几个问题,

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

2) GestureDetector.SimpleOnGestureListener 一样没有区别吗?是为了简化编码?

【问题讨论】:

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


    【解决方案1】:

    来自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;
        }
    }
    

    【讨论】:

    • 所以我不必像使用 GestureDetector.OnGestureListener 时那样添加其他方法?我可以添加我想要的唯一方法吗?
    • 就是这样。他们不能在接口上放置默认方法。但是你仍然想要这个接口,因为它允许多重继承。
    猜你喜欢
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多