Frage

Ich möchte ein Inkrementieren Sekunden-Timer wie eine Stoppuhr erstellen.

So möchte ich in der Lage sein, die Sekunden und Minuten im Format 00.01 ...

Erhöhen anzuzeigen

Google bringt nur 24-Stunden-Uhr Beispiele, ich habe mich gefragt, könnte jemand mich mit einem Beispiel oder Tutorial bekommen begann, was ich tun will?

Edit:

Hier ist, was ich habe die Chronometer in Android mit bisher

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();
}

Die oben kompiliert und ausgeführt, aber die Textview nie Schritte, es bleibt immer bei 0, jeder kann sehen, warum?

War es hilfreich?

Lösung

Ich nehme an, Sie sind sich nicht bewusst von der Android Chronometer - es hat bereits eine grundlegende Stoppuhrfunktion. Sie müssen sich mit seinen Besonderheiten ein bisschen Arbeit, aber es ist nicht schwer, es zu bekommen zu tun, was Sie wollen, wenn Sie verstehen, wie es funktioniert.

Es gibt ein paar Möglichkeiten, die Zeit am Telefon berechnet wird, aber die beiden wichtigsten sind:

  1. Die „Echtzeit“, wie jetzt auf meinen Computer Uhr nach, es ist 11.23 Uhr in England. Dies kann jedoch einen Zeitserver, wenn mein Computer Kontakte ändern und wird gesagt, dass es die falsche Zeit hat, oder ob ich mit einem Laptop zu reisen und eine Zeitzone Grenze überschritten. Mit diesem würde Chaos mit Stoppuhr als die gemessene Zeit anrichten könnte sich jederzeit ändern.

  2. Die „verstrichene Zeit seit boot“, die die Anzahl der Millisekunden ist da das Telefon eingeschaltet wurde. Diese Zahl trägt keine Beziehung auf die Echtzeit es ist, aber es wird in eine vollkommen vorhersagbaren Weise verhalten. Dies ist, was die Android chronometer Anwendungen.

Die Chronometer ist im Wesentlichen ein ‚zählen‘ Timer, den aktuellen SystemClock.elapsedRealtime() gegen die elapsedRealtime Vergleich (), die seine Basis fot Zeit eingestellt wurde. Der Unterschied zwischen den beiden, dividiert durch 1000, ist die Anzahl der Sekunden seit der Timer gestartet wurde. Wenn Sie jedoch den Timer stoppen und dann wieder starten, werden Sie ein kontra-intuitives Ergebnis erhalten - der Timer wird die vergangene Zeit, als ob es nie aufgehört hatte. Dies liegt daran, Sie brauchen, um ihre Basiszeit zu berücksichtigen, die Zeit einstellen, sie gestoppt wurde. Dies ist einfach zu tun:

// 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);

Edit:. Hier ist der vollständige Code für eine grundlegende Stoppuhr, die zeigen Ihre Zeit in einem Textview anstatt das Chronometer Widget in der XML-Datei deklariert

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();
    }
}

In Ihrem main.xml müssen Sie diese

haben
<Chronometer android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/chrono"
    android:visibility="gone"/>

Es gibt zweifellos eine Möglichkeit, den Chronometer zur Arbeit zu kommen, ohne sie in der XML-Datei erklärt, aber der Konstruktor Chronometer stopwatch = new Chronometer(this); nicht richtig funktionierte.

Der obige Code zeigt die verstrichene Zeit in einer sehr einfachen Art und Weise. wenn nur 5 Sekunden von zum Beispiel gegangen sind, zeigt es 0:5 statt der 0:05 Sie wahrscheinlich wollen. Zu, dass nicht schwer zu tun, aber ich werde gehen, dass für Sie heraus zu arbeiten! :)

Andere Tipps

Wie wäre es diese Digital Clock .

Aber grundsätzlich sollten Sie in der Lage sein, viele Java-Implementierungen zu finden, indem googeln für Schlüsselwörter wie Java, Stoppuhr, Digitaluhr, ...

Sie können einen Blick auf Stoppuhr Applet und nach Bedarf ändern (Oops mit dieser keine Quelle)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top