Я новичок в программировании на Android, поэтому я прошу вас о помощи в моей проблеме. Я пытаюсь измерить в секундах/миллисекундах время между MouseEvent.ACTION_DOWN и MouseEvent.ACTION_UP.Измерение прошедшего времени между двумя MotionEvents в 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
Моя проблема состоит в том, что переменная секунд не показывает, что я хочу, я даже не знаю, если его измерения correctly.For вышеприведенном например длительность была 16545 (???! ????), но он должен был быть между 1-3 секунд. Что делать, чтобы правильно измерить секунды или миллисекунд время между двумя MotionEvents или что я ошибаюсь в моем примере? Спасибо !
Спасибо, глядя на ваш код, который я обнаружил свою ошибку: переменная давно начала должна быть объявлена глобальной, а не локальный в моей функции, большое спасибо! – Matey
Вы должны использовать 'System.nanoTime()' вместо 'System.currentTimeMillis()'. Пожалуйста, прочитайте javadoc для обеих функций, говорится, что 'currentTimeMillis()' не следует использовать для измерения интервалов, потому что он может быть скорректирован во время выполнения. – keaukraine
Спасибо keaukraine, добавлены изменения для использования nanoTime() –