Sono nuovo nella programmazione Android, quindi ti sto chiedendo aiuto per il mio problema. Sto provando a misurare in secondi/millisecondi la quantità di tempo tra un MouseEvent.ACTION_DOWN e MouseEvent.ACTION_UP.Misura il tempo trascorso tra due MotionEvents in 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
Il mio problema consiste nel fatto che la variabile secondi non mostra quello che voglio, anche se non so se la sua misurazione correctly.For quanto sopra esempio la durata era 16545 (???! ?!?) ma avrebbe dovuto essere tra 1-3 secondi. Cosa devo fare per misurare correttamente in secondi o millisecondi l'intervallo di tempo tra due MotionEvents o cosa ho sbagliato nel mio esempio ? Grazie !
Grazie, guardando il codice ho scoperto la mia colpa: lunga lunghezza variabile deve essere dichiarata globale, non locale nella mia funzione, grazie mille! – Matey
Dovresti usare 'System.nanoTime()' invece di 'System.currentTimeMillis()'. Si prega di leggere javadoc per entrambe le funzioni, si dice che 'currentTimeMillis()' non dovrebbe essere usato per misurare gli intervalli perché potrebbe essere regolato in fase di esecuzione. – keaukraine
Grazie keaukraine, modifiche accomodate per utilizzare nanoTime() –