2013-08-23 51 views
2

我知道有一個數字時鐘小部件可用,但出於學習目的,我決定通過擴展View類創建一個自定義小部件。我已經成功地將時間吸引到了屏幕上,但我不知道讓視圖每秒更新時間的正確方法。基於時間更新的Android自定義視圖

我需要的東西,會告訴視圖重繪自己每秒更新時間。什麼是正確的方式來做到這一點?

回答

0

您是否使用計時器?如果你是那麼你可以這樣做:

private Timer timer; 
    private int seconds; 

    ... 

    seconds = 0; 
    timer = new Timer(); 
    timer.scheduleAtFixedRate(new UpdateViewTask(), 0, 1000); 
    //1000 is in milliseconds so this is one second 

    ... 

    private class UpdateViewTask extends TimerTask{ 

     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        seconds++; 
        //update view here 
        view.setText(secondsToHHMMSS(seconds)); 
       } 
      }); 
     } 
    } 

public static String secondsToHHMMSS(int secs) { 

    int hours = secs/3600; 
    int remainder = secs % 3600; 
    int minutes = remainder/60; 
    int seconds = remainder % 60; 

    return ((hours < 10 ? "0" : "") + hours 
      + ":" + (minutes < 10 ? "0" : "") + minutes 
      + ":" + (seconds< 10 ? "0" : "") + seconds); 

} 
+0

我明白了,我應該週期性地設置視圖以外的時間並使其無效以請求重繪。謝謝。 –

0

可能invalidateSelf()與您的計時器的drawable ...你可以檢查developer docs的細節。請注意「如果沒有回調附加到Drawable」語句,則什麼也不做,否則什麼都不會發生!