Pergunta

Quero criar um segundo temporizador incrementador como um cronômetro.

Então, eu quero poder exibir os segundos e minutos incrementando no formato 00:01 ...

O Google apenas traz exemplos de relógio 24 horas, eu queria saber que alguém poderia me iniciar com um exemplo ou tutorial do que eu quero fazer?

Editar:

Aqui está o que eu tenho usando o cronômetro no Android até agora

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

Em OnDestroy ()

@Override
public void onDestroy() {

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

    super.onDestroy();
}

Os acima compilam e executam, mas o TextView nunca incrementa, sempre permanece em 0, alguém pode ver o porquê?

Foi útil?

Solução

Estou assumindo que você não está ciente do Android Chronometer - Ele já possui uma função básica de parada. Você precisa trabalhar um pouco com suas peculiaridades, mas não é difícil fazê -lo fazer o que quiser depois de entender como funciona.

Existem algumas maneiras pelas quais o tempo é calculado no telefone, mas as duas principais são:

  1. O "tempo real", como agora, de acordo com o relógio do meu computador, são 11h23 na Inglaterra. No entanto, isso pode mudar se meu computador entrar em contato com um servidor de tempo e for informado que ele tem o tempo errado, ou se eu estivesse viajando com um laptop e cruzasse um limite do fuso horário. Usar isso causaria estragos no seu cronômetro, pois o tempo medido poderia mudar a qualquer momento.

  2. O "tempo decorrido desde a inicialização", que é o número de milissegundos desde que o telefone foi ligado. Esse número não tem nenhuma relação com o tempo real, mas se comportará de uma maneira perfeitamente previsível. É isso que o cronômetro Android usa.

o Chronometer é essencialmente um cronômetro de 'contagem', comparando a corrente SystemClock.elapsedRealtime() Contra o tempo de suspensão () que foi definido seu tempo base. A diferença entre os dois, dividida por 1000, é o número de segundos desde que o temporizador foi iniciado. No entanto, se você parar o cronômetro e iniciá -lo novamente, obterá um resultado contra -intuitivo - o temporizador mostrará o tempo decorrido como se nunca tivesse parado. Isso ocorre porque você precisa ajustar seu tempo base para levar em consideração o tempo em que foi interrompido. Isso é simples de fazer:

// 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: Aqui está o código completo para um stopwatch básico, que exibe seu tempo em uma visualização de texto em vez do widget do cronômetro declarado no seu arquivo 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();
    }
}

No seu main.xml você precisa ter isso

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

Sem dúvida, há uma maneira de fazer o cronômetro funcionar sem declará -lo no arquivo XML, mas o construtor Chronometer stopwatch = new Chronometer(this); não funcionou corretamente.

O código acima exibe o tempo decorrido de uma maneira muito básica. Por exemplo, se apenas 5 segundos tiverem passado, ele mostrará 0:5 ao invés de 0:05 você provavelmente quer. Corrigir isso não é difícil de fazer, mas vou deixar isso para você se exercitar! :)

Outras dicas

Que tal este Relógio digital.

Mas basicamente você deve encontrar muitas implementações de Java pesquisando palavras -chave como Java, Stopwatch, Digital Clock, ...

Você poderia dar uma olhada em Appleto de parada e modificar conforme necessário (Oops Nenhuma fonte com este)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top