當用戶得到 3 個正確答案(非連續)并且計時器正在運行時,有沒有辦法向 CountDownTimer 添加 3 秒?例如,如果當計時器顯示 10 時用戶得到 3 個正確答案,則應該增加到 13 秒。這是我實作的代碼,它不起作用。
class GamePage : AppCompatActivity() {
var correctCount = 0
var wrongCount = 0
val timer: TextView = findViewById(R.id.timer)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_game_page)
val finish = Intent(this, GameOver::class.java)
var timeCount : Long = 50000
fun counter(timeCount: Long){
var countdownTimer = object : CountDownTimer(50000, 1000) {
override fun onTick(millisUntilFinished: Long) {
timer.text = "Seconds remaining: " millisUntilFinished / 1000
}
@Override
override fun onFinish() {
if (correctCount !=0 && correctCount % 5 == 0) {
finish.putExtra("correct", correctCount.toString())
finish.putExtra("wrong", wrongCount.toString())
startActivity(finish)
} else {
counter(5000);
}
}
}.start();
}
counter(timeCount)
}
uj5u.com熱心網友回復:
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " millisUntilFinished / 1000);
//here you can have your logic to set text to edittext
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
uj5u.com熱心網友回復:
為什么不是協程?您可以輕松修改計數器,并且計時器會增加。
fun counter (timeCount: Long) {
var counter = timeCount
lifecycleScope.launch(Dispatchers.Main) {
while (counter > 0) {
delay(1000L)
counter -= 1000
if (isAnswerCorrect()) {
counter = 3 * 1000L
}
}
// timer finished
}
}
uj5u.com熱心網友回復:
您可以像這樣創建倒計時流程:
fun countdownFlow(duration: Duration) = flow {
val endTime = System.currentTimeMillis() duration.inWholeMilliseconds
while(isActive) {
val timeRemaining = (endTime - System.currentTimeMillis()).coerceAtLeast(0L).milliseconds
emit(timeRemaining)
if (timeRemaining == Duration.ZERO) break
delay(1)
}
}
然后像這樣使用它,如果你想增加計時器,你可以取消你的協程并重新啟動它。
class GamePage : AppCompatActivity() {
var correctCount = 0
var wrongCount = 0
val timer: TextView = findViewById(R.id.timer)
private var remainingTime = Duration.ZERO
private var countdownJob: Job? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_game_page)
startCountdown(50.seconds)
}
private fun startCountdown(duration: Duration)
countdownJob?.cancel()
remainingTime = duration
countdownJob = lifecycleScope.launch {
countdownFlow(duration).collect {
remainingTime = it
timer.text = "Seconds remaining: ${it.inWholeSeconds}"
}
if (correctCount !=0 && correctCount % 5 == 0) {
val finish = Intent(GamePage.this, GameOver::class.java).apply {
putExtra("correct", correctCount.toString())
putExtra("wrong", wrongCount.toString())
}
startActivity(finish)
} else {
startCountdown(5.seconds)
}
}
}
private fun addTime(duration: Duration) {
startCountdown(remainingTime.milliseconds duration)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/436907.html
