计时器:
1、使用一个TimerTask来每一秒发送一次消息,子线程中不能直接操作ui所以使用消息机制:
/* 秒表计时器-Task */
class MyTimerTask extends TimerTask {
@Override
public void run() {
Message msg = new Message();
if(recordTime == 600){
msg.what = 2;
}else{
msg.what = 1;
}
myHandler.sendMessage(msg);
}
};
2、Handler处理消息:
// 本类Handler
Handler myHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch(msg.what){
case 1:
recordTime++;
tvRecordTime.setText(format(recordTime*1000));
break;
case 2:
pauseRecord();
}
}
};
3、开启一个计时器:
private TextView tvRecordTime;
private int recordTime = 0;
private Timer timer;
private MyTimerTask timerTask;
//开始计时
timer = new Timer(true);
timerTask = new MyTimerTask();
timer.scheduleAtFixedRate(timerTask, 0, 1000);
//暂停计时
if(timerTask != null){
timerTask.cancel();
//timer.cancel();
}
计时成功后,开始把计时把数字改成时间格式:
毫秒转换成时间:
Java 毫秒转换为(天:时:分:秒)方法(抄)
public static String format(long ms) {//将毫秒数换算成x天x时x分x秒x毫秒
int ss = 1000;
int mi = ss * 60;
int hh = mi * 60;
int dd = hh * 24;
long day = ms / dd;
long hour = (ms - day * dd) / hh;
long minute = (ms - day * dd - hour * hh) / mi;
long second = (ms - day * dd - hour * hh - minute * mi) / ss;
long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss;
String strDay = day < 10 ? "0" + day : "" + day;
String strHour = hour < 10 ? "0" + hour : "" + hour;
String strMinute = minute < 10 ? "0" + minute : "" + minute;
String strSecond = second < 10 ? "0" + second : "" + second;
String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + milliSecond;
strMilliSecond = milliSecond < 100 ? "0" + strMilliSecond : "" + strMilliSecond;
return strDay + " " + strHour + ":" + strMinute + ":" + strSecond + " " + strMilliSecond;
}
通过此方法可以将毫秒转换成 天:时:分:秒
也可以对此方法进行稍微的修改就可以转换成其他格式。