我知道有一個數字時鐘小部件可用,但出於學習目的,我決定通過擴展View類創建一個自定義小部件。我已經成功地將時間吸引到了屏幕上,但我不知道讓視圖每秒更新時間的正確方法。基於時間更新的Android自定義視圖
我需要的東西,會告訴視圖重繪自己每秒更新時間。什麼是正確的方式來做到這一點?
我知道有一個數字時鐘小部件可用,但出於學習目的,我決定通過擴展View類創建一個自定義小部件。我已經成功地將時間吸引到了屏幕上,但我不知道讓視圖每秒更新時間的正確方法。基於時間更新的Android自定義視圖
我需要的東西,會告訴視圖重繪自己每秒更新時間。什麼是正確的方式來做到這一點?
您是否使用計時器?如果你是那麼你可以這樣做:
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);
}
可能invalidateSelf()與您的計時器的drawable ...你可以檢查developer docs的細節。請注意「如果沒有回調附加到Drawable」語句,則什麼也不做,否則什麼都不會發生!
我明白了,我應該週期性地設置視圖以外的時間並使其無效以請求重繪。謝謝。 –