gpt4 book ai didi

java - 在 Android CountDownTimer 中正确显示分钟数

转载 作者:行者123 更新时间:2023-11-30 09:04:18 26 4
gpt4 key购买 nike

我有一个带计时器的安卓应用。默认情况下,它显示为 00:00:00(时、分、秒)。用户可以按下 H M S 并围绕圆圈拖动 slider 来更改小时、分钟或秒,具体取决于单击的是哪个。我正在尝试通过解析可变 TextView 中的小时、分钟和秒数来创建一个 CountDownTimer,将其全部转换为秒,然后启动计时器;但是,问题是显示总分钟数而不是将其保持在 59 分钟或以下。例如,如果我倒计时 3 小时。它显示 2 小时 179 分 59 秒。当我希望它是 2 小时。 59 分 59 秒。

enter image description here

我不确定为什么会收到此错误。我在我的代码中获得了所有正确的值。

这是我在类里面为我的 CountDownTimer 设置的 setActionListener 的代码,我对我认为可能出错的地方发表了评论。:

private void setActionListeners() {

number_text = (TextView) findViewById(R.id.hour_progress_number);
minute_text = (TextView) findViewById(R.id.minute_progress_number);
second_text = (TextView) findViewById(R.id.second_progress_number);




start_timer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

// textViewShowTime.setTextAppearance(getApplicationContext(), R.style.normalText);

hourint = Integer.valueOf(number_text.getText().toString());

minuteint = Integer.valueOf(minute_text.getText().toString());

secondint = Integer.valueOf(second_text.getText().toString());

Log.i("YourActivity", "Hours: " + hourint);

Log.i("YourActivity", "Minutes: " + minuteint);

Log.i("YourActivity", "Seconds: " + secondint);

totalTimeCountInMilliseconds = ((hourint*60*60) +(minuteint*60) + (secondint)) * 1000; // time count for 3 minutes = 180 seconds
timeBlinkInMilliseconds = totalTimeCountInMilliseconds/1000;

countDownTimer = new CountDownTimer(totalTimeCountInMilliseconds, 500) {
// 500 means, onTick function will be called at every 500 milliseconds

@Override
public void onTick(long leftTimeInMilliseconds) {
long seconds = leftTimeInMilliseconds / 1000;
mSeekArc.setVisibility(View.INVISIBLE);


if ( leftTimeInMilliseconds < timeBlinkInMilliseconds ) {
// textViewShowTime.setTextAppearance(getApplicationContext(), R.style.blinkText);
// change the style of the textview .. giving a red alert style

if ( blink ) {
number_text.setVisibility(View.VISIBLE);
minute_text.setVisibility(View.VISIBLE);
second_text.setVisibility(View.VISIBLE);


// if blink is true, textview will be visible
} else {
number_text.setVisibility(View.INVISIBLE);
minute_text.setVisibility(View.INVISIBLE);
second_text.setVisibility(View.INVISIBLE);


}

blink = !blink; // toggle the value of blink
}

second_text.setText(String.format("%02d", seconds % 60));


//THE ERROR MIGHT BE HERE FOR THE MINUTE
minute_text.setText(String.format("%02d", seconds / 60));


number_text.setText(String.format("%02d", seconds / 3600)); // format the textview to show the easily readable format
}


@Override
public void onFinish() {
// this function will be called when the timecount is finished
//textViewShowTime.setText("Time up!");
number_text.setVisibility(View.VISIBLE);
minute_text.setVisibility(View.VISIBLE);
second_text.setVisibility(View.VISIBLE);
mSeekArc.setVisibility(View.VISIBLE);
}

}.start();

}
});

一段时间以来,我曾尝试篡改该值并找到它的值,但这是一个真正持久的问题,只是无法正确显示。

看起来我做的一切都是正确的:

Countdown timer in HH:MM:SS format in Android

到底是什么问题,如何解决?

如果需要,这是我的类(class)的完整代码:

http://pastebin.com/yquQPtG5

最佳答案

正如您所怀疑的那样,您的错误就在这里。

minute_text.setText(String.format("%02d", seconds / 60));

您需要减去小时数。您还可以使用您的格式对余数进行模数运算,如下所示

minute_text.setText(String.format("%02d", (seconds / 60) % 60));

更好的方法是提前计算值,然后只对占用的值进行格式化。

int just_hours = seconds / 3600;
int just_minutes = (seconds/60) % 60;
int just_seconds = seconds % 60;

关于java - 在 Android CountDownTimer 中正确显示分钟数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25314562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com