2015-08-28 3 views
0

Я делаю проект курса, и для этого проекта мне нужно будет показать таймер обратного отсчета. Будет кнопка, которая увеличивает таймер на 5+ секунд. Например, если таймер установлен и запущен в 1:00, и если пользователь нажимает кнопку, таймер должен увеличиться +5, как 1:05.Как увеличить таймер обратного отсчета во время выполнения?

Мой код:

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

Моя проблема:

Это работает так же, как я хочу, но он увеличивает только после того, как таймер закончит работу. Я хочу, чтобы он увеличивался во время обратного отсчета!

+0

** Помните: ** В этом примере я использую +1 приращение. – mrbrucewyn

+0

Возможный дубликат этого сообщения: http://stackoverflow.com/questions/13478471/incrementing-the-countdowntimer-android –

+0

Я пробовал это, но я не хочу, чтобы он дождался окончания предыдущего таймера. О Боже!! @ FrankN.Stein – mrbrucewyn

ответ

1

Вы можете использовать этот класс для ваших нужд:

public abstract class MyCountDownTimer { 

    private CountDownTimer cdt; 
    private long millisInFuture; 
    private long countDownInterval; 

    public MyCountDownTimer(long millisInFuture, long countDownInterval) { 
     this.millisInFuture = millisInFuture; 
     this.countDownInterval = countDownInterval; 

     recreateCounter(millisInFuture, countDownInterval); 
    } 

    public abstract void onFinish(); 

    public abstract void onTick(long millisUntilFinished); 

    public void start(){ 
     cdt.start(); 
    } 

    private void setMillisInFuture(long millisInFuture){ 
     this.millisInFuture = millisInFuture; 
    } 

    public void onIncrement(long millis){ 
     millisInFuture += millis; 
     recreateCounter(millisInFuture, countDownInterval); 
    } 

    private void recreateCounter(long millisInFuture, long countDownInterval){ 
     if(cdt != null){ 
      try { 
       cdt.cancel(); 
      } catch (Exception e) { 
      } 
     } 

     cdt = new CountDownTimer(millisInFuture, countDownInterval) { 

      @Override 
      public void onTick(long millisUntilFinished) { 
       setMillisInFuture(millisUntilFinished); 
       MyCountDownTimer.this.onTick(millisUntilFinished); 
      } 

      @Override 
      public void onFinish() { 
       MyCountDownTimer.this.onFinish(); 
      } 
     }; 
    } 
} 
+1

Едва ждал ответа. Огромное спасибо :) – mrbrucewyn

Смежные вопросы