Depois de fazer o curso eu tentei começar a fazer um APP meu para criar um placar de basquete. Ainda estou preso no cronometro. Criei uma classe Temporizador, que deveria armazenar o tempo em millissegundos e converter para o formato MM:SS
Problema é justamente esse, eu não consigo fazer com que o textview exiba o tempo rodando.
Segue a classe Temporizador:
//imports
public class Temporizador {
// Duração padrao do temporizador em millis
private long duracaoDoTemporizador = 10000;
//Tempo restante da partida em millis
private long tempoAteAcabar;
private String tempoAteAcabarFormatado;
//Armazena o tempo restante da partida em millis
private CountDownTimer temporizador;
//Define se temporizador está rodando
private boolean temporizadorRodando = false;
//Armazena tempo da partida em Minutos e Segundos
private TextView tempoPartida;
//Inicia a contagem. Tempo é calculado em millisegungos 1 seg = 1000; 1 minuto = 60000
public void startTimer() {
temporizador = new CountDownTimer(duracaoDoTemporizador, 1000) {
//Ação a cada milli;
@Override
public void onTick(long millisUntilEnd) {
tempoAteAcabar = millisUntilEnd;
updateCountDownText();
}
//Quando tempo chega a zero
@Override
public void onFinish() {
temporizadorRodando = false;
tempoAteAcabar = duracaoDoTemporizador;
//TODO: Play sound
//TODO: +1 quarter
}
}.start(); //Inicia contagem
temporizadorRodando = true;
// pauseStartButton.setImageBitmap(); TODO: Change image to stop button
}
public void pauseTimer() {
temporizador.cancel();
temporizadorRodando = false;
// pauseStartButton.setImageBitmap(); TODO: Change image to play button
}
public void resetTimer(){
tempoAteAcabar = duracaoDoTemporizador;
updateCountDownText();
}
private String updateCountDownText() {
int minutes = (int) (tempoAteAcabar / 1000) / 60;
int seconds = (int) (tempoAteAcabar / 1000) % 60;
String tempoAteAcabarFormatado = String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
return tempoAteAcabarFormatado;
}
public boolean isTemporizadorRodando(){
return temporizadorRodando;
}
public void setTempoPartida(TextView tempoPartida) {
tempoPartida.setText(updateCountDownText());
this.tempoPartida = tempoPartida;
}
public TextView getTempoPartida() {
return tempoPartida;
}
}
E logo abaixo a classe Main, onde eu chamo o Temporizador. Uso a variavel matchTime para armazenar o text view. Devo mencionar que a varial matchTime nem ficou roxinha no IDE.
//imports
public class MainActivity extends AppCompatActivity {
private TextView matchTime;
private ImageButton pauseStartButton;
private ImageButton resetButton;
private Temporizador tempoPartida;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
matchTime = findViewById(R.id.match_Time);
pauseStartButton = findViewById(R.id.pause_start_button);
resetButton = findViewById(R.id.reset_button);
tempoPartida = new Temporizador();
matchTime = tempoPartida.getTempoPartida();
pauseStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
if (tempoPartida.isTemporizadorRodando()){
tempoPartida.pauseTimer();
} else {
tempoPartida.startTimer();
}
}
});
resetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tempoPartida.resetTimer();
}
});
}
}