Quiero pausar el cronómetro y después de hacer clic en el botón quiero continuar el cromontaje para contar ... Busco pero no pude relacionar una función con esto ... ¿cómo puedo hacerlo?Android_Cronómetro pausa
Respuesta
Estás a necesitar una variable que realiza un seguimiento en el tiempo que ha pasado desde que se inició el cronómetro:
long timeWhenStopped = 0;
actualizar el valor de la variable cuando se detiene el cronómetro de la siguiente manera:
timeWhenStopped = mChronometer.getBase() - SystemClock.elapsedRealtime();
mChronometer.stop();
también vamos a utilizar esta variable para ajustar el cronómetro antes de iniciarlo:
mChronometer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
mChronometer.start();
Y finalmente, si tiene una manera de restablecer su cronómetro, debe recordar también restablecer la variable timeWhenStopped. Algo como esto:
mChronometer.setBase(SystemClock.elapsedRealtime());
timeWhenStopped = 0;
Hice una clase PauseableChronometer
para esto.
import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.widget.Chronometer;
public class PausableChronometer extends Chronometer {
private long timeWhenStopped = 0;
public PausableChronometer(Context context) {
super(context);
}
public PausableChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PausableChronometer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void start() {
setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
super.start();
}
@Override
public void stop() {
super.stop();
timeWhenStopped = getBase() - SystemClock.elapsedRealtime();
}
public void reset() {
stop();
setBase(SystemClock.elapsedRealtime());
timeWhenStopped = 0;
}
public long getCurrentTime() {
return timeWhenStopped;
}
public void setCurrentTime(long time) {
timeWhenStopped = time;
setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
}
}
Las dos otras respuestas son idénticos, y funcionan muy bien en la pantalla del cronómetro, pero tienen un defecto: timeWhenStopped
, así como el valor devuelto por getCurrentTime()
, es negativo.
Aquí es mi sugerencia, base en estas dos respuestas:
public class PausableChronometer extends Chronometer {
private long timeWhenStopped = 0;
public PausableChronometer(Context context) {
super(context);
}
public PausableChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PausableChronometer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void start() {
setBase(SystemClock.elapsedRealtime() - timeWhenStopped);
super.start();
}
@Override
public void stop() {
super.stop();
timeWhenStopped = SystemClock.elapsedRealtime() - getBase();
}
public void reset() {
stop();
setBase(SystemClock.elapsedRealtime());
timeWhenStopped = 0;
}
public long getCurrentTime() {
return timeWhenStopped;
}
public void setCurrentTime(long time) {
timeWhenStopped = time;
setBase(SystemClock.elapsedRealtime() - timeWhenStopped);
}
}
Hay que entender SystemClock.elapsedRealtime()
como un indicador de "ahora". Entonces, cuando (re) iniciemos el cronómetro, estableceremos la base N
segundos en el pasado, N
siendo el valor actual del temporizador (0 en caso de primer arranque). De forma similar, al detener el cronómetro, el tiempo mostrado por el cronómetro es el tiempo transcurrido entre la base establecida anteriormente (getBase()
) y ahora (SystemClock.elapsedRealtime()
), de ahí la resta.
- 1. Pausa de la vista Pausa en una dirección determinada
- 2. Pausa larga incidental Recolección de basura joven pausa
- 3. Qt Reproducir/Pausa Acción?
- 4. Pausa en Python
- 5. C# Pausa entre sendkeys
- 6. pausa de AVCaptureSession?
- 7. Pausa en TTS android
- 8. Pausa de envío al marcador
- 9. Android Pager Problema en pausa
- 10. HTML5 Video pausa y rebobinado
- 11. Pausa de redirección de PHP
- 12. Insertar una pausa en un tel: // link
- 13. pausa gdb sin punto de interrupción
- 14. pausa y reanudar Android Repo sincronización
- 15. Pausa el temporizador y luego continúa
- 16. sistema ("pausa"); - ¿Por qué está mal?
- 17. Web Audio API reanudar desde la pausa
- 18. Comando Archivo por lotes PAUSA no funciona
- 19. Receptor de difusión y actividad en pausa
- 20. Killing aplicación de Android en pausa
- 21. Pausa de la aplicación/estado de reanudación
- 22. JavaScript Garbage Collection hace una pausa
- 23. iOS AVPlayer Reproducir/Pausa tema botón
- 24. ¿Cómo hacer pausa en PyCharm Mis excepciones
- 25. Parallel.Foreach C# Pausa y función de parada?
- 26. ¿Cómo implementar pausa (y más) funcionalidad?
- 27. Java ExecutorService pausa/reanudar un hilo específico
- 28. Controlar un script de matlab (Pausa, Restablecer)
- 29. UIScrollView pausa NSTimer mientras se desplaza
- 30. Actividad 'Pausa' mientras espera que ocurra PictureCallback
maravillosa respuesta :) –
great answer ... with good discription .. !! Debe aceptarse como respuesta .. @andveand si funciona ... !! –
¿Por qué no es esta la respuesta aceptada? Me funciona bien, gracias! – jamesc