web-dev-qa-db-fra.com

Comment détecter lorsque le bouton est enfoncé et relâché sur android

Je voudrais démarrer une minuterie qui commence quand un bouton est enfoncé pour la première fois et se termine quand il est relâché (fondamentalement, je veux mesurer la durée pendant laquelle un bouton est maintenu enfoncé). Je vais utiliser la méthode System.nanoTime () à ces deux moments, puis soustraire le nombre initial du nombre final pour obtenir une mesure du temps écoulé pendant que le bouton était maintenu enfoncé.

(Si vous avez des suggestions pour utiliser autre chose que nanoTime () ou une autre façon de mesurer la durée pendant laquelle un bouton est maintenu enfoncé, je suis également ouvert à celles-ci.)

Merci! Andy

23
Andy Thompson

Utilisez OnTouchListener au lieu de 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;
     }
  });
41
Nick

Cela fonctionnera certainement:

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. Dans onClickListener, arrêtez les temps.
  2. Calculer la différence.

.

5
Archie.bpgc