【问题标题】:How to detect when button pressed and released on android如何检测按钮何时在android上按下和释放
【发布时间】:2012-08-15 03:29:53
【问题描述】:

我想启动一个计时器,该计时器从第一次按下按钮时开始,并在松开按钮时结束(基本上我想测量按下按钮的时间)。我将在这两个时间都使用 System.nanoTime() 方法,然后从最后一个数字中减去初始数字,以获得按住按钮时所用时间的测量值。

(如果您对使用 nanoTime() 以外的其他方法或其他测量按钮按下时间的方法有任何建议,我也愿意接受。)

谢谢! 安迪

【问题讨论】:

标签: java android button timer pressed


【解决方案1】:

使用OnTouchListener 代替 OnClickListener:

// this goes somewhere in your class:
  long lastDown;
  long lastDuration;

  ...

  // this goes wherever you setup your button listener:
  button.setOnTouchListener(new OnTouchListener() {
     @Override
     public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
           lastDown = System.currentTimeMillis();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
           lastDuration = System.currentTimeMillis() - lastDown;
        }

        return true;
     }
  });

【讨论】:

  • 不幸的是,当使用键盘按下按钮时,这不起作用。它只有在被触摸时才会起作用。
  • 所以你想看看键盘按钮按下了多长时间?
  • 这个方法需要修改。如果您按下然后滑动手指,在按下状态下按住按钮,然后松开手指,按钮保持按下状态。您还需要添加 MotionEvent.ACTION_CANCEL 来处理这种行为。
  • onTouch方法的末尾也缺少return true
【解决方案2】:

这肯定会奏效:

button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            increaseSize();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            resetSize();
        }
        return true;
    }
});

【讨论】:

    【解决方案3】:
    1. 在 onTouchListener 中启动计时器。
    2. 在 onClickListener 中停止时间。

    计算差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多