Android Chronometer 倒计时

问题描述 投票:0回答:1

我是 Android 开发新手,目前正在尝试实现一个非常简单的倒数计时器,该计时器将在到达 00:00 后继续计数,但在低于 00:00 时文本颜色为红色。

我有两个问题: 1)它从比我设置的少一秒开始计数(在示例中,它从 00:09 而不是 00:10 开始)。 2) 到达 00:00 后,在下一个刻度时,它将文本变为红色,但将计数器保持在 00:00(后一部分不是有意的),然后继续计数为 -00:01、-00:02 等. 因此,00:00 会计数两次,一次为白色,一次为红色。有什么想法为什么会发生这种情况吗?这是我的代码:

public class myTimerActivity extends Activity {

    Chronometer mainTimer;
    long mStartValue = 10; // Countdown value

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set the user interface for this Activity
        setContentView(R.layout.activity_mytimer);

        // Initialize Chronometer object
        mainTimer = (Chronometer) findViewById(R.id.chronometer);
        mainTimer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
            @Override
            public void onChronometerTick(Chronometer chronometer) {
                if (SystemClock.elapsedRealtime()>=chronometer.getBase()) {
                chronometer.setTextColor(Color.parseColor("#FF0000"));
                };
            }
        });
        mainTimer.setFormat("%s");
        mainTimer.setBase(SystemClock.elapsedRealtime()+mStartValue*1000);
        mainTimer.start();
    }
    ...
}

更新: 这是罗杰建议的另一个实现:

public class myTimerActivity extends Activity {

    long mStartValue = 10; // Countdown value
    private TextView txtCounter;
    private static final String FORMAT_COUNTER = "%02d:%02d:%02d";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set the user interface for this Activity
        setContentView(R.layout.activity_mytimer);
        txtCounter = (TextView)findViewById(R.id.mTextField);

        new CountDownTimer(mStartValue*1000, 1000) {

            public void onTick(long millisUntilFinished) {
                txtCounter.setText("" + String.format(FORMAT_COUNTER,
                        TimeUnit.MILLISECONDS.toHours(millisUntilFinished), // HOURS PASSED
                        TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)), // MINUTES PASSED (over the hours)
                        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)) // SECONDS PASSED (over the minutes)
                ));
            }

            public void onFinish() {
                txtCounter.setTextColor(Color.parseColor("#FF0000"));
            }
        }.start();

    }
    ...
}
android countdown chronometer
1个回答
0
投票

出现问题的原因是框架的 Chronometer 类通过截断毫秒的除法来计算秒,而此时它应该对结果进行四舍五入。

我创建了一个自定义类来避免这个问题。

在此处查看更多详细信息:https://stackoverflow.com/a/76991683/4195337

© www.soinside.com 2019 - 2024. All rights reserved.