Creare un timer incremento in secondi in formato 00:00?
Domanda
Voglio creare un secondo timer incrementare come un cronometro.
Quindi voglio essere in grado di visualizzare i secondi e minuti incrementando nel formato 00:01 ...
Google porta solo fino 24 esempi di clock ora, mi chiedevo qualcuno potrebbe farmi iniziare con un esempio o tutorial di ciò che voglio fare?
Modifica:
Ecco quello che ho con il cronometro in Android finora
In onCreate ()
secondsT = 0;
elapsedTimeBeforePause = 0;
stopWatch.start();
startTime = SystemClock.elapsedRealtime();
stopWatch.setBase(elapsedTimeBeforePause);
stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
@Override
public void onChronometerTick(Chronometer arg0) {
//countUp is a long declared earlier
secondsT = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
String asText = (secondsT / 60) + ":" + (secondsT % 60);
//textGoesHere is a TextView
((TextView)findViewById(R.id.time)).setText(asText);
}
});
In OnDestroy ()
@Override
public void onDestroy() {
inCall = false;
elapsedTimeBeforePause = SystemClock.elapsedRealtime() - stopWatch.getBase();
super.onDestroy();
}
Le compilazioni di cui sopra e corre, ma la TextView non incrementa, rimane sempre a 0, chiunque può capire perché?
Soluzione
sto supponendo che non sono a conoscenza del Chronometer
Android - ha già una funzione di base del cronometro. Hai bisogno di lavorare con le sue peculiarità un po ', ma non è difficile arrivare a fare ciò che si vuole una volta capito come funziona.
Ci sono alcuni modi che ora si calcola al telefono, ma i due principali sono:
-
Il "tempo reale", come ad esempio in questo momento secondo il mio orologio del computer, è 11:23 in Inghilterra. Tuttavia, questo può cambiare se i miei contatti di computer server tempo e viene detto che ha il momento sbagliato, o se siamo stati in viaggio con un computer portatile e attraversato un confine fuso orario. Utilizzando questo sarebbe devastare con il cronometro come il tempo misurato potrebbe cambiare in qualsiasi momento.
-
Il "tempo trascorso dal boot", che è il numero di millisecondi da quando il telefono è stato acceso. Questo numero non ha relazione con il tempo reale è, ma si comporterà in maniera perfettamente prevedibile. Questo è quello che utilizza il cronometro Android.
Il Chronometer
è essenzialmente un 'contare' timer, confrontando la corrente SystemClock.elapsedRealtime()
contro l'elapsedRealtime () che è stato impostato fot suo tempo base. La differenza tra i due, diviso 1000, è il numero di secondi trascorsi temporizzatore. Tuttavia, se si arresta il timer e poi iniziare di nuovo, si otterrà un risultato contro-intuitivo - il timer mostrerà il tempo trascorso, come se non fosse mai fermato. Questo perché è necessario regolare il suo tempo base per prendere in considerazione il tempo si è fermato. Questo è semplice da fare:
// When you're stopping the stopwatch, use this
// This is the number of milliseconds the timer was running for
elapsedTimeBeforePause = SystemClock.elapsedRealtime() - timer.getBase();
// When you're starting it again:
timer.setBase(SystemClock.elapsedRealtime() - elapsedTimeBeforePause);
Modifica:. Ecco il codice completo per un cronometro di base, che visualizza il vostro tempo in un TextView piuttosto che il widget di cronometro dichiarato nel file XML
public class TestProject extends Activity {
TextView textGoesHere;
long startTime;
long countUp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Chronometer stopWatch = (Chronometer) findViewById(R.id.chrono);
startTime = SystemClock.elapsedRealtime();
textGoesHere = (TextView) findViewById(R.id.textGoesHere);
stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
@Override
public void onChronometerTick(Chronometer arg0) {
countUp = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
String asText = (countUp / 60) + ":" + (countUp % 60);
textGoesHere.setText(asText);
}
});
stopWatch.start();
}
}
Nel vostro main.xml è necessario disporre di questo
<Chronometer android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/chrono"
android:visibility="gone"/>
C'è senza dubbio un modo per ottenere il cronometro a lavorare senza dichiararlo nel file XML, ma il Chronometer stopwatch = new Chronometer(this);
costruttore non ha funzionato correttamente.
Il codice sopra mostra il tempo trascorso in un modo molto semplice. Per esempio, se solo 5 secondi sono passati, si mostrerà 0:5
piuttosto che il 0:05
probabilmente si desidera. Fissaggio che non è difficile da fare, ma lascio che per voi a lavorare fuori! :)
Altri suggerimenti
Che ne dite di questo Digital Clock .
Ma fondamentalmente si dovrebbe essere in grado di trovare molte implementazioni Java googling per parole chiave come Java, cronometro, orologio digitale, ...
Si potrebbe dare un'occhiata al cronometro Applet e modificare, se necessario (ops nessuna fonte con questo)