长按GestureDetector也可在水龙头上触发 [英] Long press in GestureDetector also fires on tap

查看:79
本文介绍了长按GestureDetector也可在水龙头上触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试通过以下问题实施代码:使用Android检测长按,但是即使我只是轻按它,它也始终会检测到长按.我的代码如下(我扩展了ImageView,因为其中包含了更多代码,与该问题无关):

I tried implementing code from this question: Detecting a long press with Android, but it always detects a long press, if even I just tap it. My code is as follows (I extended ImageView, because more code is in it, not relevant for this question):

public class EbsImageView extends ImageView  {
    final GestureDetector gestureDetector = new GestureDetector(this.getContext(), new GestureDetector.SimpleOnGestureListener() {
        public void onLongPress(MotionEvent e) {
            Log.e("", "Longpress detected");
        }
    public boolean onSingleTapUP(MotionEvent e) {
        Log.e("", "Press detected");

            // don't consume, we want the long press to fire if it was a 
            // long press
        return false;
        }
    });

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }
}

推荐答案

您需要覆盖onDown并将其设置为return true.以下代码对我有用:

You need to override onDown and make it return true. The following code worked for me:

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);
    }
}

这篇关于长按GestureDetector也可在水龙头上触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆