Je suis nouveau dans la programmation Android alors je demande votre aide pour mon problème. J'essaie de mesurer en secondes/millisecondes la durée entre un événement MouseEvent.ACTION_DOWN et un événement MouseEvent.ACTION_UP.Mesurez le temps écoulé entre deux MotionEvents dans Android
@Override
public boolean onTouchEvent(MotionEvent event) {
long start=0;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// manage down press
start=System.nanoTime();//START
System.out.println("START");
}
else if (event.getAction() == MotionEvent.ACTION_MOVE) {
// manage move
System.out.println(event.getRawX()+","+event.getRawY());
}
else {
// manage up
long finish=System.nanoTime()//FINISH
long seconds = (finish-start)/1000000000;//for seconds
Toast.makeText(this, "FINISH, duration: "+seconds, Toast.LENGTH_SHORT).show();
System.out.println("FINISH, duration: "+seconds);
}
return true;
}
Logcat:
03-19 04:04:27.140: I/System.out(4348): START
03-19 04:04:27.160: I/System.out(4348): 517.0,280.0
03-19 04:04:27.190: I/System.out(4348): 517.0,280.0
03-19 04:04:27.200: I/System.out(4348): 517.0,280.0
03-19 04:04:27.220: I/System.out(4348): 517.0,280.0
03-19 04:04:27.250: I/System.out(4348): 517.0,280.0
03-19 04:04:27.260: I/System.out(4348): 517.0,280.0
03-19 04:04:27.300: I/System.out(4348): 517.0,280.0
03-19 04:04:27.310: I/System.out(4348): 517.0,280.0
03-19 04:04:27.330: I/System.out(4348): FINISH, duration: 16545
Mon problème consiste, en fait, cette variable secondes ne montre pas ce que je veux , je ne sais même pas si sa mesure correctly.For la durée exemple ci-dessus était 16545 (???! ?!?) mais il aurait dû être entre 1-3 secondes.Que dois-je faire pour mesurer correctement en secondes ou millisecondes le temps entre deux MotionEvents ou ce que je me trompe dans mon exemple? Je vous remercie !
Merci, regardant votre code j'ai découvert ma faute: démarrage trop long variable doit être déclarée mondiale, et non locale dans ma fonction, je vous remercie beaucoup! – Matey
Vous devriez utiliser 'System.nanoTime()' au lieu de 'System.currentTimeMillis()'. Veuillez lire javadoc pour les deux fonctions, il est dit que 'currentTimeMillis()' ne devrait pas être utilisé pour mesurer les intervalles car il pourrait être ajusté au moment de l'exécution. – keaukraine
Merci keaukraine, changements accommodés pour utiliser nanoTime() –