2016-01-28 116 views
0

我需要在我的應用程序中計數遞增計時器。我瀏覽了很多關於這個主題的論壇,但我找不到任何東西。其實我明白我們可以用天文臺做到這一點,但我有2天文臺的問題:自定義遞增計數器

  1. 我不能在服務中使用天文臺,因爲天文臺需要佈局。
  2. 我無法初始化天文臺計數超過1小時。

我的代碼:

stopWatch = new Chronometer (MainActivity.this); 
startTime = SystemClock.elapsedRealtime(); 
stopWatch.start(); 
stopWatch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { 
    @Override 
    public void onChronometerTick(Chronometer arg0) { 
     countUp = (SystemClock.elapsedRealtime() - arg0.getBase())/1000; 
     String asText = (countUp/60) + ":" + (countUp % 60); 
     Log.i("t", asText); 
    } 
}); 
+0

你能比「我需要計數計時器」更具體嗎?你打算如何使用這個計時器?這些信息可能有助於我們提出其他機制或方法。 – EJK

+0

如何在反向中使用'CountDownTimer'? –

+0

@UmaKanth也許能幫助我,你能告訴我該怎麼做? – user3152651

回答

5

可以在反向使用countDownTimer並獲得經過的時間。

long totalSeconds = 30; 
long intervalSeconds = 1; 

CountDownTimer timer = new CountDownTimer(totalSeconds * 1000, intervalSeconds * 1000) { 

    public void onTick(long millisUntilFinished) { 
     Log.d("seconds elapsed: " , (totalSeconds * 1000 - millisUntilFinished)/1000); 
    } 

    public void onFinish() { 
     Log.d("done!", "Time's up!"); 
    } 

}; 

啓動計時器。

timer.start(); 

停止定時器。

+0

感謝它的工作,你能告訴我它是如何工作的嗎? – user3152651

+0

這裏是[文檔](http://developer.android.com/intl/zh-tw/reference/android/os/CountDownTimer.html)。簡而言之,它將在每個時間間隔運行onTick函數。秒數已經過,直到totalSeconds完成。一切都在毫秒,因此乘以1000. –

+0

謝謝我有一個問題: 我不能停止倒計時(倒計時count.cancel() 它不需要創建另一個問題...:D – user3152651

-1

您可以使用此代碼,可以這樣做: https://gist.github.com/MiguelLavigne/8809180c5b8fe2fc7403

/** 
* Simple timer class which count up until stopped. 
* Inspired by {@link android.os.CountDownTimer} 
*/ 
public abstract class CountUpTimer { 

    private final long interval; 
    private long base; 

    public CountUpTimer(long interval) { 
     this.interval = interval; 
    } 

    public void start() { 
     base = SystemClock.elapsedRealtime(); 
     handler.sendMessage(handler.obtainMessage(MSG)); 
    } 

    public void stop() { 
     handler.removeMessages(MSG); 
    } 

    public void reset() { 
     synchronized (this) { 
      base = SystemClock.elapsedRealtime(); 
     } 
    } 

    abstract public void onTick(long elapsedTime); 

    private static final int MSG = 1; 

    private Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      synchronized (CountUpTimer.this) { 
       long elapsedTime = SystemClock.elapsedRealtime() - base; 
       onTick(elapsedTime); 
       sendMessageDelayed(obtainMessage(MSG), interval); 
      } 
     } 
    }; 
} 
+0

我打算使用這段代碼,並告訴你結論 – user3152651

0

sec,min和hr每次增加值分別爲59,59,23。每個值都以不同的視圖顯示,創建一個數字秒錶。

checkin.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(final View view) { 
    checkin.setEnabled(false); 
      new CountDownTimer(300000000, 1000){ 
       public void onTick(long millisUntilFinished){ 

        sec++; 
        if(sec==59) { 
         min++; 
         sec=0; 
        } 
        if(min==59){ 
         min=0; 
         hr++; 
        } 
        if(hr==23){ 
         hr=00; 
        } 
        secView.setText(String.valueOf(sec)); 
        minView.setText(String.valueOf(min)); 
        hrView.setText(String.valueOf(hr)); 
       } 
       public void onFinish(){ 
        Snackbar.make(view, "Finish", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } 
      }.start(); 
     } 
    }); 
+0

請解釋你的代碼,以及它爲什麼有助於回答這個問題。也許閱讀[this](https://stackoverflow.com/help/how-to-answer)將有助於理解一個好的答案。 – Markus

+0

它基本上做的是。每次第二次命中59時,分鐘增加,每次分鐘命中59時增加小時。倒數計時器已經給出了從1秒到隨機最大數量的限制。 – reflexgravity