3

我知道有一个可用的数字时钟小部件,但出于学习目的,我决定通过扩展 View 类来创建一个自定义小部件。我成功地将时间绘制到屏幕上,但我不知道让视图每秒更新时间的正确方法。

我需要一些东西来告诉视图每秒重绘一次以更新时间。这样做的正确方法是什么?

4

2 回答 2

0

可能 invalidateSelf() 使用您的计时器在可绘制对象上...您可以查看开发人员文档以获取详细信息。请注意“如果 Drawable 没有附加回调,则不执行任何操作”语句,否则不会发生任何事情!

于 2013-08-23T02:06:40.383 回答
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 );

}
于 2013-08-23T02:19:25.450 回答