我有一个倒计时的计时器。我希望显示的格式为00.00或“ss.SS”。但是我几小时没有取得任何进展。如果没有SimpleDateFormat,它将显示01.91,然后转到01.9。这使得很难观看,因为它使视图保持居中而闪烁。我真正想要的是保持格式01.90并且不允许丢弃0的方法。我可以使用没有SimpleDateFormat的原始代码完成此操作吗?
/*
* This is my original code before I tried the SimpleDateFormat
*
* This code is fully functional and works good, it just keeps dropping the 0 every
* 10 milliseconds and makes the view shake
*
* getTimeSecs() could return 5, 10, 15, 30, 90 seconds converted to milliseconds
* getCountDownInterval() returns 10
*
*/
public void createTimer() {
myCounter = new CountDownTimer(getTimeSecs(), getCountDownInterval()) {
public void onTick(long millisUntilFinished) {
timerIsRunning = true;
if(millisUntilFinished < 10000) {
TVcountDown.setText("0" + ((millisUntilFinished / 10) / 100.0));
} else {
TVcountDown.setText("" + ((millisUntilFinished / 10) / 100.0));
}
} //end onTick()
@Override
public void onFinish() {
timerIsRunning = false;
TVcountDown.setBackgroundColor(myRes.getColor(R.color.solid_red));
TVcountDown.setTextColor(myRes.getColor(R.color.white));
TVcountDown.setText("Expired");
// Make sure vibrate feature is enabled
if(wantsVib == true) {
vib.vibrate(300);
}
} //end onFinish()
}.start();
} //end createTimer()
尝试SimpleDateFormat
后,这是我的代码public void createTimer() {
myCounter = new CountDownTimer(getTimeSecs(), getCountDownInterval()) {
public void onTick(long millisUntilFinished) {
timerIsRunning = true;
long current = (long) ((millisUntilFinished / 10) / 100.0);
TVcountDown.setText("" + timerDisplay.format(current));
}
@Override
public void onFinish() {
timerIsRunning = false;
TVcountDown.setBackgroundColor(myRes.getColor(R.color.solid_red));
TVcountDown.setTextColor(myRes.getColor(R.color.white));
TVcountDown.setText("Expired");
// Make sure vibrate feature is enabled
if(wantsVib == true) {
vib.vibrate(300);
}
}
}.start();
} //end createTimer()
我知道!我甚至不认为我接近使用SimpleDateFormat并且我感到沮丧。它会运行,但在毫秒数上只倒数秒。所以15秒显示00.15而不是15.00。
我不希望有人为我编写代码,只需要指向正确的方向。我能找到的所有教程都涉及数年,数天等等,而我无法从中掌握这一概念。
我不想使用SimpleDateFormat - 因为它对我来说并不简单 - 只需使用我的原始代码,并在每10毫秒的毫秒边加一个零。
提前致谢。
答案 0 :(得分:2)
试试这个:
TVcountDown.setText(convertToMyFormat(millisUntilFinished));
和convertToMyFormat()
方法:
public String convertToMyFormat(long ms) {
String secString, msecString;
//constructing the sec format:
int sec = (int) (ms / 1000);
if(sec < 10) secString = "0"+sec;
else if(sec == 0) secString = "00";
else secString = ""+sec;
//constructing the msec format:
int msec = (int) ((ms-(sec*1000))/10.0);
if(msec < 10) msecString = "0"+msec;
else if(msec == 0) msecString = "00";
else msecString = ""+msec;
return secString+":"+msecString;
}
我不确定我是否正确地执行了msec
部分,但您可以根据需要进行调整。
答案 1 :(得分:0)
将数字转换为字符串,它将保持格式化。另外你可以做这样的事情
public String NumToStr(long i){
if (i < 10 ) {
return ("0" + Long.toString(i));
}
return Long.toString(i);
}
确保“9”始终返回“09”。现在将字符串设置为文本。
实际上可能更容易的是
if(millisUntilFinished < 10000) {
TVcountDown.setText("0" + Long.toString((millisUntilFinished / 10) / 100.0));
} else {
TVcountDown.setText("" + Long.toString((millisUntilFinished / 10) / 100.0));
}
使用Float.toString()或Double.toString,或任何你需要的。不要害怕编写一个小函数来编辑字符串,以便在需要时使其显示。
public String KeepFirstTwoCharOfString(String string){
//code to store first two Char into string
// return the string containing only first 2 chars
}