【问题标题】:Android countdown timer not running correctlyAndroid倒数计时器未正确运行
【发布时间】:2016-04-10 23:49:57
【问题描述】:

我的代码中有一个倒数计时器。这个倒数计时器应该每 10 毫秒计时一次,并将 textview 的数字加 1,直到达到用户在游戏中获得的分数。

它甚至没有达到价值的一半。这是我的代码:

new CountDownTimer(lastScore*10, 10) {

        public void onTick(long millisUntilFinished) {
            tempScore++;

            TextView lg = (TextView)findViewById(R.id.lastgame);
            lg.setText("LAST SCORE: " + String.valueOf(tempScore));
            lg.setTypeface(eightBitFont);
        }

        public void onFinish() {

        }

    }.start();

Lastscore 是他们在比赛中得到的分数。 tempScore 仅用于存储新值以将 textview 更改为。

编辑:一位用户指出 10 毫秒的分辨率可能太小了。 在 10 毫秒分辨率下,我的 lastScore 值为 115,而 tempScore 仅达到 46。将其更改为 30 毫秒,我达到了 108 左右,将其更改为 50 让我更接近了。看来我将不得不使用 100 毫秒的刻度值才能使其成为正确的值。但这对于我想要实现的目标来说有点慢。有没有更好的方法来实现我想要实现的目标?

【问题讨论】:

  • 你检查过什么是“lastScore”值吗?
  • 是的。不使用计时器,使用 3 行 textview 代码,并将值设置为 lastScore 显示正确的值
  • 嗨@Josh,lastScore 的确切值是多少(给我们一个您正在测试的示例)...... CountDownTimer 构造函数接收倒计时应该运行的时间(以毫秒为单位)作为第一个参数为。
  • 我的意思是 - 在启动计时器之前 lastScore 的值是多少?
  • 10 毫秒对于查找 UI 元素、更新其值和设置其字体来说可能是一个过高的分辨率。尝试 100 毫秒,并将您的 findViewById() 和 setTypeface() 调用移到 onTick() 之外。

标签: java android countdowntimer


【解决方案1】:

每次倒计时时,都会调用一个昂贵的方法 findViewById。 您必须在计时器之外分配它。 所以你的代码可能看起来像:

TextView lg = (TextView)findViewById(R.id.lastgame);

new CountDownTimer(lastScore*10, 10*1000) { // set to be called each 10 seconds

        public void onTick(long millisUntilFinished) {
            tempScore++;
            lg.setText("LAST SCORE: " + String.valueOf(tempScore));

        }

        public void onFinish() {

        }

    }.start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多