Pregunta

Quiero crear un segundo temporizador incrementando como un cronómetro.

Así que quiero ser capaz de mostrar los segundos y minutos de incremento en el formato 00:01 ...

Google sólo nos lleva a las 24 horas ejemplos de reloj, me preguntaba alguien podría ayudarme a empezar con un ejemplo o un tutorial de lo que quiero hacer?

Editar:

Esto es lo que he utilizando el cronómetro en Android hasta la fecha

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

En OnDestroy ()

@Override
public void onDestroy() {

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

    super.onDestroy();
}

Los compila y ejecuta anteriores, pero el TextView Nunca incrementos, ya que siempre está a 0, ¿alguien puede ver por qué?

¿Fue útil?

Solución

Estoy asumiendo que no son conscientes de la Chronometer Android - que ya tiene una función básica cronómetro. Es necesario trabajar con sus peculiaridades un poco, pero no es difícil de conseguir que haga lo que quiere una vez que entienda cómo funciona.

Hay algunas formas en que se calcula el tiempo en el teléfono, pero los dos principales son:

  1. El "tiempo real", como en este momento, según mi reloj de la computadora, es 11:23 en Inglaterra. Sin embargo, esto puede cambiar si mis contactos de ordenador un servidor de hora y se le dice que tiene el momento equivocado, o si estuviera viajando con un ordenador portátil y cruce un límite zona horaria. El uso de este causaría estragos con su cronómetro que mide el tiempo podría cambiar en cualquier momento.

  2. El "tiempo transcurrido desde el arranque", que es el número de milisegundos desde el teléfono estaba encendido. Este número no guarda ninguna relación con el tiempo real que es, pero se comportará de una manera perfectamente predecible. Esto es lo que los usos Android cronómetro.

El Chronometer es esencialmente un 'contar hasta' temporizador, comparando la SystemClock.elapsedRealtime() actual frente a la elapsedRealtime () que se estableció fot su base de tiempo. La diferencia entre los dos, dividido por 1000, es el número de segundos desde que se inició el temporizador. Sin embargo, si se detiene el temporizador y luego empezar de nuevo, obtendrá un resultado contrario a la intuición - el temporizador mostrará el tiempo transcurrido como si nunca se hubiera detenido. Esto se debe a que necesita ajustar su tiempo de base para tener en cuenta el momento en que se detuvo. Esto es fácil de hacer:

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

Editar:. Aquí está el código completo para un cronómetro básico, que muestra su vez en una TextView en lugar del cronómetro de widgets declarado en el archivo 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();
    }
}

En su main.xml es necesario tener presente

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

No es, sin duda, una manera de conseguir el cronómetro al trabajo sin declarar en el archivo XML, pero el constructor Chronometer stopwatch = new Chronometer(this); no funcionaba correctamente.

El código anterior muestra el tiempo transcurrido de una manera muy básica. Por ejemplo, si sólo 5 segundos han pasado, se mostrará en lugar de la 0:5 0:05 es probable que desee. De fijación que no es difícil de hacer, pero voy a dejar que para que pueda trabajar fuera! :)

Otros consejos

¿Qué tal este Reloj Digital .

Pero, básicamente, usted debería ser capaz de encontrar muchas implementaciones de Java buscando en Google para las palabras clave como Java, cronómetro, reloj digital, ...

Usted puede echar un vistazo a Cronómetro Applet y modificar según sea necesario (Vaya ninguna fuente con éste)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top