Android 长按手势探测器也会在水龙头上点火

Android 长按手势探测器也会在水龙头上点火,android,gesture,Android,Gesture,我试着实现这个问题中的代码:,但它总是检测到长按,即使我只是轻触它。我的代码如下(我扩展了ImageView,因为其中包含更多代码,与此问题无关): 正如我在评论中提到的,您应该区分onsingletaup()和onsingletaup()。使用替代注释是一种很好的做法 我有点困惑,因为你问题的标题似乎表明长时间的新闻报道也会触发点击事件,而你问题的文本则相反。也就是说,点击触发了一个长新闻事件。如果是后者,请尝试从onSingleTapUp()返回true。这适用于我使用SimpleGetSt

我试着实现这个问题中的代码:,但它总是检测到长按,即使我只是轻触它。我的代码如下(我扩展了
ImageView
,因为其中包含更多代码,与此问题无关):


正如我在评论中提到的,您应该区分
onsingletaup()
onsingletaup()
。使用替代注释是一种很好的做法

我有点困惑,因为你问题的标题似乎表明长时间的新闻报道也会触发点击事件,而你问题的文本则相反。也就是说,点击触发了一个长新闻事件。如果是后者,请尝试从
onSingleTapUp()
返回true。这适用于我使用
SimpleGetStureListener

class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener {

  @Override
  public boolean onDown(MotionEvent event) {
     //...
    return super.onDown(event);
  }

  @Override
  public boolean onSingleTapUp(MotionEvent event) {
    //...
    return true;
  }

  @Override
  public void onLongPress(MotionEvent event) {
    //...
    super.onLongPress(event);
  }
}

我希望它有帮助。

您需要覆盖
onDown
,并使其
返回true
。以下代码适用于我:

class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onDown(MotionEvent event) {
      // triggers first for both single tap and long press
      return true;
    }

    @Override
    public boolean onSingleTapUp(MotionEvent event) {
      // triggers after onDown only for single tap
      return true;
    }

    @Override
    public void onLongPress(MotionEvent event) {
      // triggers after onDown only for long press
      super.onLongPress(event);
    }
}
解决方案有效(在
onDown()
中返回
true
)。我还通过在设置
手势检测器之前将视图的
clickable
focusable
属性设置为
true
,使其工作

val gestureDetectorCompat = GestureDetectorCompat(context, object : GestureDetector.SimpleOnGestureListener() {
        override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
            // log "Single Tap Confirm"
            return true
        }

        override fun onLongPress(e: MotionEvent?) {
            // log "Long Press"
        }
    })
image_stateful.isClickable = true
image_stateful.isFocusable = true
image_stateful.setOnTouchListener { _, event -> gestureDetectorCompat.onTouchEvent(event) }

从onTouchEvent()@Eu.Dr返回false。没什么区别,我也尝试了这里的代码:但同样的问题。你的@Override注释在onLongPress和onsingletapp的哪里?这只是复制/粘贴失败?@Opiatefuchs-onsingletappup根本没有被激发。从Android文档中的示例来看,只有
onDown
onShowPress
onLongPress
被激发。总是,不管我做什么手势。我现在正在开发一个使用
视图
onLongClickListener
的解决方案。无法启动onSingleTapUp,因为您没有覆盖它。而是在SingleTapUp上添加一个方法。注意最后一个字母(P)应该是小写,而您的字母是大写,这在JAVA中很重要。这就是@Opiatefuchs询问您覆盖注释的原因。如果您添加了它,编译器应该警告您实际上没有重写。它仍然会为我触发
val gestureDetectorCompat = GestureDetectorCompat(context, object : GestureDetector.SimpleOnGestureListener() {
        override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
            // log "Single Tap Confirm"
            return true
        }

        override fun onLongPress(e: MotionEvent?) {
            // log "Long Press"
        }
    })
image_stateful.isClickable = true
image_stateful.isFocusable = true
image_stateful.setOnTouchListener { _, event -> gestureDetectorCompat.onTouchEvent(event) }