【问题标题】:Make a score counter work like a timer in android让分数计数器像 android 中的计时器一样工作
【发布时间】:2016-09-21 21:18:04
【问题描述】:

我是 Java 新手,正在开发我的第一个应用程序。我希望分数像计时器一样显示,直到达到玩家的分数。这是我写的代码。

Handler mHandler = new android.os.Handler();
int temp_score = 0;
while(temp_score<=score){
    final String score_string = "" + temp_score;
    mHandler.postDelayed(new Runnable(){
        public void run() {
            scoreTextView.setText(score_string);
        }
    }, 1000);
    temp_score++;
}

它似乎不起作用。当我运行它时,应用程序会暂停一段时间,然后显示最终分数。它不会在中间步骤中显示它。我从未使用过这种基于时间的功能。有人可以帮我理解为什么会这样吗?另外,有人可以给我链接,让我可以更多地阅读 postDelayed 方法。我无法从 developer.android 网站上理解,因为我对它还很陌生。

谢谢

【问题讨论】:

  • postDelayed 表示它会在一定的延迟后执行一次Runnable。你的 Runnable 可以无限循环运行以展示你当前的分数。

标签: java android android-studio handler android-handler


【解决方案1】:

试试这个:

Handler mHandler = new android.os.Handler();
int temp_score = 0;
int i = 0;
while(temp_score<=score){
    final String score_string = "" + temp_score++;
    mHandler.postDelayed(new Runnable(){
        public void run() {
            scoreTextView.setText(score_string);
        }
    }, ++i*1000);
}

处理程序基本上是与单个线程关联的对象,并且能够向其发送消息、发布指令(Runnables)。 postDelayed() 是指定线程上的延迟命令发布。查看链接:https://developer.android.com/reference/android/os/Handler.html

您最初的解决方案不起作用,因为您的 while 循环一直运行到它找到玩家的分数,并且它为每一步创建延迟运行,但是这些运行一个接一个地运行得如此之快,因此您只会注意到最后的变化。

【讨论】:

  • 应用停止响应。
  • 完美运行!!!非常感谢!!!但是你能解释一下你的代码吗?您添加了另一个整数,该整数在循环中每次都会递增。那么AP中的时间间隔不应该继续增加吗? ++i 是如何让代码运行速度比以前慢的?
  • 我把代码改成了++i*i*1。现在效果好多了。
  • 最后一个问题。为什么在分数计数器到达其最终值之前处理之后的代码?
  • 相比 1000ms 的时间你的 while 循环几乎在同一时间运行,所以如果你想给事件计时,你需要增加延迟时间。您可以假设不同的 Runnable 方法将从 0 点延迟到给定的延迟。我希望它有所帮助。
【解决方案2】:
  int temp_score = 0;
 Timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
       runOnUiThread(new Runnable() {

            @Override
            public void run() {
                scoreTextView.setText(score_string);
            }
        });


       temp_score++;
    }
  }, 0, UPDATE_INTERVAL);

【讨论】:

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