util tiempo studio stackoverflow poner como java android timer increment countdowntimer

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