我正在尝试制作一个倒计时应用程序,其中最长时间不到10分钟,我希望它显示为mm:ss:ms(不太确定ms是毫秒的术语)。这就是我在这里
text = (TextView) this.findViewById(R.id.counterView);
new CountDownTimer(16069000, 10) { // adjust the milli seconds here
public void onTick(long millisUntilFinished) {
text.setText(""+String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(millisUntilFinished),
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))
));
}
public void onFinish() {
text.setText("done!");
}
}.start();
目前正在显示hh:mm:ss,我试图玩它,但无法让它运转起来。我试着将格式设为
"%02D:%02D:%02D:%03D"
但是当我试图在setText中添加毫秒部分时,我迷路了。
答案 0 :(得分:2)
你明确地显示小时:分钟:这里的秒数:
text.setText(""+String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(millisUntilFinished),
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))
));
将其更改为:
long m = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
long s = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished - m*60*1000);
long ms = millisUntilFinished - m*60*1000 - s*1000;
text.setText(""+String.format("%02d:%02d:%02d",m,s,ms));
答案 1 :(得分:1)
这是代码
CounterClass timer = new CounterClass(150000, 1000); // set time here
timer.start();
define class here
public class CounterClass extends CountDownTimer {
public CounterClass(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
// timeTextView.setText("Completed.");
this.cancel();
finish();
}
public void onTick(long millisUntilFinished) {
long millis = millisUntilFinished;
caaryLong = millis;
String hms = String.format(
"%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millis)
- TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS
.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis)
- TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS
.toMinutes(millis)));
System.out.println(hms);
timeTextView.setText(hms);
}
}
答案 2 :(得分:1)
如果你使用android studio而不是有一个外部库
第1步:在build.gradle(模块应用)
编译' joda-time:joda-time:2.9.1'
第2步:在您的活动.xml文件中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_main"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context="com.countdowntimer.MainActivity">
<TextView
android:id="@+id/tv_milliseconds"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:text="MilliSeconds"
android:textColor="@android:color/white"
android:textSize="80sp" />
<Chronometer
android:id="@+id/chronometer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:visibility="gone" />
</LinearLayout>
第3步:初始化Textview和Chronometer
CountDownTimer countDownTimer;
private long startTime = 1000;
private final long interval = 100;
第4步:在OnChronometerTickListener
chronometer.start();
chronometer.setBase(1);
chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
setDateTime();
}
});
第5步:创建功能
public void setDateTime() {
countDownTimer = new MalibuCountDownTimer(startTime, interval);
countDownTimer.start();
}
public class MalibuCountDownTimer extends CountDownTimer {
public MalibuCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
}
@Override
public void onTick(long millisUntilFinished) {
tvMilliseconds.setText("" + millisUntilFinished);
}
}
答案 3 :(得分:1)
我实际上设法使用以下代码text.setText(""+String.format("%02d:%02d:%03d",
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)),
TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished))
));
答案 4 :(得分:0)
迷路是什么意思?
如果您询问为毫秒部分输入的值,请使用
millisUntilFinished % 1000