java - tiempo - Incrementando el countDownTimer Android
show countdown timer android (2)
Debe saber que no tiene que llamar manualmente a onFinish
cuando el tiempo está activo en la clase de cuenta atrás, tampoco tiene que cancelar en onFinish
como uno lleva al otro o disminuir manualmente nada. Pruebe lo siguiente y vea si encaja con la tarea que tenía en mente. Espero que puedas notar que no veo razón pragmática para ver si un botón "ya no está siendo cliqueado".
public class MainActivity extends Activity {
Button incrementTime, startTime;
public TextView timedisplay;
long millisInFuture = 1000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
incrementTime = (Button) findViewById(R.id.button2);
startTime = (Button) findViewById(R.id.button3);
timedisplay = (TextView) findViewById(R.id.mycounter);
resetText();
incrementTime.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
millisInFuture += 1000;
resetText();
}
});
startTime.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
CountDownTimer wavetimer = new myTimer(millisInFuture + 3000, 1000).start();
// ^ add 3 seconds.
}
});}
protected void resetText() {
timedisplay.setText("Time Left: " + millisInFuture / 1000);
}
public class myTimer extends CountDownTimer {
private long millisActual;
public myTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
millisActual = millisInFuture - 3000;
}
@Override
public void onTick(long millisUntilFinished) {
//v start showing the tick after 3 seconds.
if (millisUntilFinished <= millisActual) {
timedisplay.setText("Time Left: " + millisUntilFinished / 1000);
}
}
@Override
public void onFinish() {
timedisplay.setText("Countdown Finished");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
tiene una pregunta sobre CountDownTimer. Tengo que hacer una aplicación que permita al usuario incrementar el tiempo en +1, por cada clic del botón. Luego, después de que se deja de hacer clic en el botón, espera tres segundos y luego comienza la cuenta regresiva.
Pegué mi código a continuación.
Mi problema es: parece que el Incremento del número no funciona correctamente, pero parece que después de detener el Incremento del número (onStop ()) va directamente a (onFinish ()). En lugar de ir al OnTick () y disminuir el número en 1 por segundo. He intentado varias formas de solucionar esto, pero me he quedado atascado.
¿Alguien puede llevarme en la dirección correcta de qué hacer? Cualquier ayuda sería apreciada. ¡Gracias chicos!
public class MainActivity extends Activity {
Button incrementTime, startTime;
public TextView timedisplay;
public myTimer wavetimer;
private long millisInFuture;
private long millisUntilFinished;
private long countDownInterval;
private long onclicktime;
//private WaveInterface model;
public int countdown;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
incrementTime = (Button) findViewById(R.id.button2);
startTime = (Button) findViewById(R.id.button3);
incrementTime.setText("Increment Time");
startTime.setText("Start");
timedisplay = (TextView) findViewById(R.id.mycounter);
timedisplay.setText("Time Left: " + millisUntilFinished);
wavetimer = new myTimer (millisInFuture, 1000);
incrementTime.setOnClickListener(new OnClickListener(){
int countdown = 01;
/**
* On click button Listner
* @return
*/
public void onClick(View v) {
millisInFuture++;
return;
}
});
startTime.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
wavetimer.start();
}
});}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public class myTimer extends CountDownTimer {
public long millisInFuture;
private long countDownInterval;
public myTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
millisUntilFinished--;
if (millisUntilFinished == 0){
wavetimer.onFinish();
}
else {
timedisplay.setText("Time Left: " + millisUntilFinished / 1000);
}
}
@Override
public void onFinish() {
timedisplay.setText("Countdown Finished");
wavetimer.cancel();
}
public void onStop() {
millisInFuture = millisInFuture + 1;
timedisplay.setText("Time Left: " + millisInFuture);
}
Parece que no puedo averiguar cómo incrementar el número correctamente. Lo he intentado de múltiples maneras y sigue dando vueltas. No estoy seguro de dónde mirar. Cualquier ayuda sería apreciada. ¡Gracias chicos!
Agregue TextView con el nombre ''timerText'' en su archivo xml de actividad
Agregue las siguientes dos variables globales en la clase
int repeatCounter=1;//incrementing for every 60 sec
CountDownTimer tripTimeCounter;
Agregue el siguiente método a la clase y llámelo desde la actividad onCreate o desde cualquier otro lugar donde desee
public void startTimeCounter(){
tripTimeCounter=new CountDownTimer(60*1000, 1000){
@Override
public void onFinish() {
// TODO Auto-generated method stub
repeatCounter=repeatCounter+1;
startTimeCounter();//follow the recursion on finish of the limit of 60 seconds & increment the repeat counter
}
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
timerText.setText(formatMillis((repeatCounter*60)*1000-millisUntilFinished));
}
}.start();
}
Para mostrar el valor en el formato de tiempo use el siguiente método
static public String formatMillis(long val) {
StringBuilder buf=new StringBuilder(20);
String sgn="";
if(val<0) { sgn="-"; val=Math.abs(val); }
append(buf,sgn,0,( val/3600000));
append(buf,":",2,((val%3600000)/60000));
append(buf,":",2,((val %60000)/1000));
//append(buf,".",3,( val%1000));
return buf.toString();
}