【问题标题】:Simulate Long press by Touch events通过触摸事件模拟长按
【发布时间】:2013-07-27 14:21:05
【问题描述】:

我们如何通过触摸事件模拟长按?或者我们如何计算屏幕被触摸的时间,都处于 ACTION_DOWN 状态?

【问题讨论】:

    标签: android event-handling touch-event long-press


    【解决方案1】:

    试试这个。您无需为此寻找 hack。

    final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
     public void onLongPress(MotionEvent e) {
      Log.e("", "Longpress detected");
     }
    });
    
    public boolean onTouchEvent(MotionEvent event) {
     if (gestureDetector.onTouchEvent(event)) {
      return true;
     }
     switch (event.getAction()) {
      case MotionEvent.ACTION_UP:
       break;
      case MotionEvent.ACTION_DOWN:
       break;
      case MotionEvent.ACTION_MOVE:
       break;
     }
     return true;
    }
    };
    

    【讨论】:

      【解决方案2】:

      我终于实现了触摸屏长按,谢谢:

      textView.setOnTouchListener(new View.OnTouchListener() {
      
          private static final int MIN_CLICK_DURATION = 1000;
          private long startClickTime;
      
          @Override
          public boolean onTouch(View v, MotionEvent event) {
      
              switch (event.getAction()) {
              case MotionEvent.ACTION_UP:
                  longClickActive = false;
                  break;
              case MotionEvent.ACTION_DOWN:
                  if (longClickActive == false) {
                      longClickActive = true;
                      startClickTime = Calendar.getInstance().getTimeInMillis();
                  }
                  break;
              case MotionEvent.ACTION_MOVE:
                  if (longClickActive == true) {
                      long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                      if (clickDuration >= MIN_CLICK_DURATION) {
                          Toast.makeText(MainActivity.this, "LONG PRESSED!",Toast.LENGTH_SHORT).show();
                          longClickActive = false;
                      }
                  }
                  break;
              }
              return true;
          }
      });
      

      其中private boolean longClickActive = false; 是一个类变量。

      【讨论】:

      • 感谢这为我提供了解决方案。
      • 问题是长按正在等待 ACTION_MOVE 有时不会被调用但长按必须被捕获
      【解决方案3】:

      您必须计算 ACTION_DOWN 和 ACTION_UP 事件之间的时间。 只在 ACTOIN_DOWN 状态下无法计算这个时间,因为它是代表 LONG TAP 事件的 TAP 的事件序列的 START 事件

      【讨论】:

      • 谢谢,我使用 ACTION_DOWN 和 ACTION_MOVE 做到了。
      【解决方案4】:

      要计算触摸计数,您可以获取事件的 getPointerCount(),例如 here

      对于长按可能this 有帮助

      编辑:希望this link 帮助您确定获得触摸的持续时间

      【讨论】:

      • 我需要时间不计较老兄。
      • 可能我没听懂你的意思,所以希望编辑的答案和附加的链接对你有更多帮助,祝你好运
      • 这并不完全是我的回答,而是通过使用布尔标志启发了我。谢谢:D
      猜你喜欢
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      相关资源
      最近更新 更多