具有基于时间更新的 Android 自定义 View

标签 android

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

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

最佳答案

你在使用定时器吗?如果你是那么你可以这样做:

    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 );

}

关于具有基于时间更新的 Android 自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18393462/

相关文章:

java - 如何在Java项目中使用Kotlin库?

Android闹钟广播/检测

java - getLastLocation 是多久之前的?

android - NDK 构建失败

android - 如何在 Android 操作栏上设置菜单项的样式

android - TopAppBar 与 Navigation 集成的脚手架

android - 导出 Facebook 好友电子邮件地址 Android

android - Chrome 中 Bootstrap 4 底部的巨大空白

android - 通过窗口管理器注入(inject)运动事件?

安卓 :get an object from an inner class