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é?

È stato utile?

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:

  1. 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.

  2. 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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top