如何在Android上添加倒计时器?

15

我目前正在做我的项目,想为我的Android数独游戏添加一个计时器。我需要知道源代码以及如何将源代码放入我的数独游戏中。请帮忙,我很急需要 :(


7
欢迎来到Stack Overflow,请阅读FAQ。请注意,这不是一个“替我写代码”的网站。如果您有具体的问题,请告诉我们是什么问题以及您尝试解决它的方法。同时,如果这是您的作业,请标记问题。 - amit
8个回答

21

布局XML:

<Chronometer
android:id="@+id/simpleChronometer"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

代码:

Chronometer simpleChronometer = (Chronometer) findViewById(R.id.simpleChronometer); // initiate a chronometer

simpleChronometer.start(); // start a chronometer

输入图片描述


15

如果您正在使用 Android 并需要一个每秒钟都会“滴答”声的计时器,您可以创建以下的CountDownTimer子类。它可以轻松地修改为以任何间隔进行“滴答”声。

如果你在android上需要每秒滴答一次的计时器,你可以创建下面的CountDownTimer子类。它可以很容易地修改为以任何你想要的间隔来滴答。

import android.os.CountDownTimer;

public abstract class CountUpTimer extends CountDownTimer {
        private static final long INTERVAL_MS = 1000;
        private final long duration;

    protected CountUpTimer(long durationMs) {
        super(durationMs, INTERVAL_MS);
        this.duration = durationMs;
    }

    public abstract void onTick(int second);

    @Override
    public void onTick(long msUntilFinished) {
        int second = (int) ((duration - msUntilFinished) / 1000);
        onTick(second);
    }

    @Override
    public void onFinish() {
        onTick(duration / 1000);
    }
}

然后像这样使用它

CountUpTimer timer = new CountUpTimer(30000) {
    public void onTick(int second) {
        timerView.setText(String.valueOf(second));
    }
};

timer.start();

你如何停止计时器? - Andrews Agyemang Opoku
https://developer.android.com/reference/android/os/CountDownTimer.html#cancel()timer.cancel() - Dan Andreasson

12

5
Android的CountDownTimer应该符合您的需求。文档还提供了一个小例子,可以帮助您。
编辑:对于计数,我认为Android的Chronometer将是最容易的选择。
编辑2:我认为您应该从这里开始。

1
当然,您需要更仔细地遵循API。Chronometer有一个start()方法,例如可以在您的ActivityonCreate()中调用。 - Ovidiu Latcu
我尝试将计时器演示实现到数独游戏中,但当我运行时,整个数独游戏被覆盖成了计时器演示。 - user1209031
好的,我认为我已经将http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ChronometerDemo.html中的代码复制粘贴到了我的数独游戏中的onCreate()函数中。 - user1209031
你是“想”吗?你不只是一直复制/粘贴代码……你要亲自编写代码。你有开发Android的经验吗? - Ovidiu Latcu
是的,我已经安装了SDK。现在我的数独游戏可以运行了,但是因为我没有Android方面的背景知识,所以我遵循了《Hello, Android》一书的指导。现在我想通过向它添加计时器来进一步提高它。 - user1209031
显示剩余4条评论

2
_countTimer = new CountDownTimer(40000, 1000) {
            public void onTick(long millisUntilFinished) {
                String _millis=String.valueOf(40-(millisUntilFinished/1000));
                CameraScreen._timerTxt.setText("0."+_millis);
            }
 _countTimer.start();

2
为了完整性和必要性,我需要进行翻译。这里有一个Kotlin版本:
import android.os.CountDownTimer

abstract class CountUpTimer(private val secondsInFuture: Int, countUpIntervalSeconds: Int) : CountDownTimer(secondsInFuture.toLong() * 1000, countUpIntervalSeconds.toLong() * 1000) {

    abstract fun onCount(count: Int)

    override fun onTick(msUntilFinished: Long) {
        onCount(((secondsInFuture.toLong() * 1000 - msUntilFinished) / 1000).toInt())
    }
}

以下是如何使用它的步骤

val counter = object: CountUpTimer(30, 1){
      
      override fun onCount(count: Int) {
          Log.i("Counter", "Counting: $count")
      }
                
      override fun onFinish() {
          Log.i("Counter", "Counting done")
      }
}
counter.start()

1
我花了几个小时寻找简单的解决方法来实现计时器。 如果我们使用View类来显示时间,最容易的解决方法就是使用Chronometer类。
不幸的是,它不能在没有View的情况下工作。 我希望在操作栏中显示时间,这就是我需要不带视图的时间字符串的原因。 以下是我的想法:
我正在使用java.util.Timer、java.util.TimerTask和Android Studio中的Kotlin。
  private fun stopwatch() {
    var num : Long = 0L
    val timer : Timer = Timer()
    val tt : TimerTask = object : TimerTask(){
        override fun run() {
            num+=1000L
            println(TimerUtil.timerDisplay(num))
        }
    }
    timer.schedule(tt, 0L, 1000L)
}

将字符串格式化为MM:SS格式的辅助函数:

class TimerUtil {
companion object {
    fun timerDisplay(time: Long): String {
        val minutes = TimeUnit.MILLISECONDS.toMinutes(time)
        val seconds = TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit
            .MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(time))

        return " %02d:%02d".format(minutes, seconds)
    }
}

}


1

原来,计时器在内部使用了一种称为 "system.elapsedRealTime" 的东西,它是从手机首次启动开始计算的时间。

在实际情况中,当手机关机时,即使之前保存了时间,计时器读数也会出现错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接