2015-08-28 37 views
0

我正在製作一個課程項目,對於這個項目,我需要顯示一個倒數計時器。會有一個按鈕使定時器增加5+秒。例如,如果定時器在1:00設置並啓動,並且用戶單擊按鈕,定時器必須像1:05那樣增加+5。如何在運行時增加倒數計時器?

我的代碼:

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