web-dev-qa-db-ja.com

androidでボタンが押されて離されたことを検出する方法

ボタンが最初に押されたときに開始し、リリースされたときに終了するタイマーを開始したい(基本的に、ボタンが押されている時間を測定したい)。両方の時間でSystem.nanoTime()メソッドを使用し、最後の数字から最初の数字を引いて、ボタンが押されている間に経過した時間の測定値を取得します。

(nanoTime()またはボタンが押されている時間を測定する他の方法以外の何かを使用するための提案があれば、私もそれらを受け入れます。)

ありがとう!アンディ

23
Andy Thompson

OnClickListenerの代わりに OnTouchListener を使用します。

// 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;
     }
  });
41
Nick

これは間違いなく機能します:

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;
    }
});
6
Pramod J George
  1. OnClickListenerで時間を停止します。
  2. 差を計算します。

.

5
Archie.bpgc