如何在 Android 中启动增量计时器
How to Start Incremental Timer in Android
在提问之前让我告诉你,这个问题已经回答了很多次,但我没有解决我的问题。
我尝试了 this Questions 答案,但没有多大帮助。
所以问题是我正在 android 中创建一个 Mastermind 游戏,我想在用户输入第一个 PIN 时从 00:00 开始计时,直到用户输入最后一个 PIN 或当用户点击新游戏时,计时器将重置,直到用户再次输入第一个 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 获得命中计时器将重置并且在第一个 Pin 再次被命中之前不会启动。
任何帮助将不胜感激。
提前致谢
我只是解决了我的问题,这就是我的做法
声明
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);
}
};
它对我来说非常好用,希望对你们也有用
在提问之前让我告诉你,这个问题已经回答了很多次,但我没有解决我的问题。 我尝试了 this Questions 答案,但没有多大帮助。
所以问题是我正在 android 中创建一个 Mastermind 游戏,我想在用户输入第一个 PIN 时从 00:00 开始计时,直到用户输入最后一个 PIN 或当用户点击新游戏时,计时器将重置,直到用户再次输入第一个 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 获得命中计时器将重置并且在第一个 Pin 再次被命中之前不会启动。 任何帮助将不胜感激。 提前致谢
我只是解决了我的问题,这就是我的做法
声明
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);
}
};
它对我来说非常好用,希望对你们也有用