Question

Je veux créer une deuxième minuterie incrémenter comme un chronomètre.

Je veux être en mesure d'afficher les secondes et les minutes incrémenter dans le format 00:01 ...

Google apporte que des exemples d'horloge de 24 heures, je me demandais quelqu'un pourrait-il me commencé par un exemple ou tutoriel de ce que je veux faire?

Edit:

Voici ce que j'ai en utilisant le Chronometer dans Android jusqu'à présent

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

Dans OnDestroy ()

@Override
public void onDestroy() {

    inCall = false;
    elapsedTimeBeforePause = SystemClock.elapsedRealtime() - stopWatch.getBase();

    super.onDestroy();
}

Les compile, et fonctionne au-dessus, mais le TextView incrémente jamais, il reste toujours à 0, peut-on pourquoi?

Était-ce utile?

La solution

Je suppose que vous n'êtes pas au courant de l'Android Chronometer - il a déjà une fonction chronomètre de base. Vous devez travailler avec ses particularités un peu, mais il est difficile de ne pas le faire pour faire ce que vous voulez une fois que vous comprenez comment cela fonctionne.

Il y a quelques façons que le temps est calculé au téléphone, mais les deux principaux sont:

  1. Le « temps réel », comme en ce moment, selon mon horloge de l'ordinateur, il est 11h23 en Angleterre. Toutefois, cela peut changer si mes contacts informatiques un serveur de temps et est dit qu'il a le mauvais moment, ou si je voyageais avec un ordinateur portable et croisai une limite de fuseau horaire. L'utilisation de ce bouleverserait avec votre chronomètre pendant que le temps mesuré pourrait changer à tout moment.

  2. Le « temps écoulé depuis le démarrage », ce qui est le nombre de millisecondes depuis le téléphone a été allumé. Ce nombre ne porte aucune relation avec le temps réel, il est, mais il se comporte d'une manière parfaitement prévisible. C'est ce que l'Android utilise Chronometer.

Le Chronometer est essentiellement un timer « comptage progressif », comparer le courant SystemClock.elapsedRealtime() contre le elapsedRealtime () qui a été mis fot son temps de base. La différence entre les deux, divisé par 1000, est le nombre de secondes depuis la minuterie a été lancé. Cependant, si vous arrêtez la minuterie puis commencer à nouveau, vous obtiendrez un résultat contre-intuitif - la minuterie affiche le temps écoulé comme si elle avait jamais cessé. En effet, vous devez ajuster son temps de base à prendre en considération le temps qu'il a été arrêté. Ceci est simple:

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

Modifier. Voici le code complet pour un chronomètre de base, qui affiche votre temps dans un TextView plutôt que le widget Chronometer déclaré dans votre fichier 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();
    }
}

Dans votre main.xml vous devez avoir cette

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

Il y a sans aucun doute un moyen d'obtenir le Chronometer de travailler sans le déclarer dans le fichier XML, mais le constructeur Chronometer stopwatch = new Chronometer(this); ne fonctionnait pas correctement.

Le code ci-dessus affiche le temps écoulé de manière très basique. Par exemple, si seulement 5 secondes se sont écoulées, il montrera 0:5 plutôt que la 0:05 vous voulez probablement. Fixation ce n'est pas difficile à faire, mais je vais laisser ça pour vous de travailler dehors! :)

Autres conseils

Que diriez-vous celui-ci Horloge numérique.

Mais, fondamentalement, vous devriez être en mesure de trouver de nombreuses implémentations Java par googler mots-clés comme java, chronomètre, horloge numérique, ...

Vous pouvez jeter un oeil à Chronomètre Applet et modifier au besoin (Oops aucune source de celui-ci)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top