在问问题之前,让我告诉您该问题已经回答了很多次,但是我没有解决问题。
我尝试了this Questions答案,但没有真正的帮助。

所以问题是我正在用android创建一个Mastermind Game,我想从00:00开始计时,当用户输入第一个PIN等等,直到用户按下最后一个PIN或当用户单击New Game时,计时器将重置并在用户再次输入第一个PIN之前不会启动。

所以这是我的尝试

Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {

    @Override
    public void run() {
        long millis = System.currentTimeMillis() - startTime;
        int seconds = (int) (millis / 1000);
        int minutes = seconds / 60;
        seconds = seconds % 60;

        timerTextView.setText(String.format("%d:%02d", minutes, seconds));

        timerHandler.postDelayed(this, 500);
    }
};


启动或停止计时器的功能

@Override
public void onPause() {
    super.onPause();
    timerHandler.removeCallbacks(timerRunnable);
    timerCheck = true;
}


当用户按下第一个PIN时,将执行此代码

timerCheck = true;
startTimer();


当用户按下最后一个PIN时,此代码将执行

timerCheck = false;
startTimer();


什么都没用
请帮助我在“第一个条件为真”时启动计时器,并在“最后一个条件”为真时停止计时器,在此期间,如果NewGame获取命中计时器将重置并且在第一针再次命中之前不启动。
任何帮助将不胜感激。
提前致谢

最佳答案

我只是解决我的问题,这就是我的解决方法

声明书

private Handler customHandler = new Handler();
private long startTime = 0L;
long timeInMilliseconds = 0L;
long timeSwapBuff = 0L;
long updatedTime = 0L;


输入第一个PIN码时启动计时器

startTime = SystemClock.uptimeMillis();
customHandler.postDelayed(updateTimerThread, 0);


输入最后一个PIN时暂停计时器

timeSwapBuff += timeInMilliseconds;
customHandler.removeCallbacks(updateTimerThread);


主要可运行

private Runnable updateTimerThread = new Runnable() {

    public void run() {

        timeInMilliseconds = SystemClock.uptimeMillis() - startTime;

        updatedTime = timeSwapBuff + timeInMilliseconds;

        secs = (int) (updatedTime / 1000);
        mins = secs / 60;
        secs = secs % 60;
        int milliseconds = (int) (updatedTime % 1000);
        timerTextView.setText(String.format("%02d", mins) + ":"
                + String.format("%02d", secs));
        customHandler.postDelayed(this, 0);
    }

};


对我来说,它完全可以正常工作,所以对你们也一样

10-07 19:47
查看更多