我知道有一个可用的数字时钟小部件,但出于学习目的,我决定通过扩展 View 类来创建一个自定义小部件。我成功地将时间绘制到屏幕上,但我不知道让视图每秒更新时间的正确方法。
我需要一些东西来告诉视图每秒重绘一次以更新时间。这样做的正确方法是什么?
我知道有一个可用的数字时钟小部件,但出于学习目的,我决定通过扩展 View 类来创建一个自定义小部件。我成功地将时间绘制到屏幕上,但我不知道让视图每秒更新时间的正确方法。
我需要一些东西来告诉视图每秒重绘一次以更新时间。这样做的正确方法是什么?
可能 invalidateSelf() 使用您的计时器在可绘制对象上...您可以查看开发人员文档以获取详细信息。请注意“如果 Drawable 没有附加回调,则不执行任何操作”语句,否则不会发生任何事情!
你在用定时器吗?如果你是,那么你可以这样做:
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 );
}