我有一个应用程序,告诉我上学时间(:P)。我有一个文本视图,其文本为时间:(需要数小时)。应该是6.2,但现在是6,然后当我单击开始时,它说School立即完成,然后崩溃了。哦,我想以小时为单位显示时间(6.2 = 6小时20分钟)。
可能是什么问题呢?
代码startActivity:
package com.nieeli.timer;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class startActivity extends Activity implements OnClickListener {
private static final String tag = "Main";
private MalibuCountDownTimer countDownTimer;
private long timeElapsed;
private boolean timerHasStarted = false;
private Button startB;
private TextView text;
private TextView timeElapsedView;
private final long startTime = 22500000/3600000;
private final long interval = 1/100;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startB = (Button) this.findViewById(R.id.button);
startB.setOnClickListener(this);
text = (TextView) this.findViewById(R.id.timer);
timeElapsedView = (TextView) this.findViewById(R.id.timeElapsed);
countDownTimer = new MalibuCountDownTimer(startTime, interval);
text.setText(text.getText() + String.valueOf(startTime));
}
public void onClick(View v) {
if (!timerHasStarted) {
countDownTimer.start();
timerHasStarted = true;
startB.setText("Start");
} else {
countDownTimer.cancel();
timerHasStarted = false;
startB.setText("Stop and Reset");
}
}
// CountDownTimer class
public class MalibuCountDownTimer extends CountDownTimer {
public MalibuCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
text.setText("School Finished!");
timeElapsedView.setText("Time Passed: "
+ String.valueOf(startTime));
}
@Override
public void onTick(long millisUntilFinished) {
text.setText("Time remain:" + millisUntilFinished);
timeElapsed = startTime - millisUntilFinished;
timeElapsedView.setText("Time Left: "
+ String.valueOf(timeElapsed));
}
}
}
清单或布局未做任何更改。
感谢:D
最佳答案
首先,请记住long是整数类型。
私人最终长间隔= 1/100;
不等于0.01;我相信它将计算为零。另外,这就是您希望onTick调用的频率。我相信您正在尝试说您希望每0.01毫秒被调用一次,这似乎太过分了。也许您的意思是每100毫秒(每秒10次)?
您可能还需要交换startB.setText行,以便在停止时显示“开始”,在启动时显示“停止”
您要将毫秒转换为小时和分钟?您可以尝试这样的事情:
long totalMinutes =毫秒/ 1000/60;
长时间=毫秒/ 60;
长分钟= totalMinutes-(小时* 60);
编辑:
如果要使倒数(6.2代表6小时20分钟)每10分钟减少0.1,有两种主要方法。
第一个选项是将“间隔”设置为10 * 60 * 1000(十分钟内的毫秒数)。然后在onTick中,将浮点数(10.0或其他数值)减去0.1。如果可以的话,那可能是一种快速而肮脏的方法,但这并不理想。
第二个是做我上面描述的。然后,当您有小时数和分钟数时:
剩余的浮动时间=(浮动)小时+(浮动)分钟/ 100
使用String.format将其显示在textview中。就像是
String.format(“%。1f%n”,timeRemaining)
仅显示一个小数点
我实际上并没有尝试过该代码,但从我的头顶上,这应该给您一些技巧,以指导您朝着正确的方向发展。