在Android的SDK中,为我们提供了一个计时器,这个计时器称为Chronometer,我们可以成它为Android的一个组件,同时它也具备自己独有的方法。
Chronometer的使用比较方面简单,再也不需要使用定时器来管理时间了。
代码如下:
package com.kelly.timer;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.Chronometer;
import android.widget.Toast;
import android.widget.Chronometer.OnChronometerTickListener;
public class MainActivity extends Activity {
Chronometer chronometer;
long toatlTime = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chronometer = (Chronometer) findViewById(R.id.timer);
/**
* 设置现实的格式,你可以指定一个字符串,字符串中包含一个%s,然后chronometer
* 就会自动将mm:ss的那个时间放置到你的第一个%s的位置。
*/
// chronometer.setFormat("%s");
chronometer
.setOnChronometerTickListener(new OnChronometerTickListener() {
public void onChronometerTick(Chronometer cArg) {
toatlTime++;
long time = SystemClock.elapsedRealtime()
- cArg.getBase();
int h = (int) (time / 3600000);
int m = (int) (time - h * 3600000) / 60000;
int s = (int) (time - h * 3600000 - m * 60000) / 1000;
String hh = h < 10 ? "0" + h : h + "";
String mm = m < 10 ? "0" + m : m + "";
String ss = s < 10 ? "0" + s : s + "";
cArg.setText(hh + ":" + mm + ":" + ss);
}
});
/**
* SystemClock.elapsedRealtime() 获取从启动开始的时间,设置了它之后计时器会从00:00开始计时
* SystemClock.currentThreadTimeMillis()获取当前Thread的运行时间
* SystemClock.setCurrentTimeMillis (long millis) 设置当前的时间
*
* chronometer.setBase()方法可以设置当前的计时器开始计时的时间
*/
chronometer.setBase(SystemClock.elapsedRealtime());
// 启动
chronometer.start();
}
public void stop(View view) {
chronometer.stop();
Toast.makeText(getBaseContext(), "-->" + (toatlTime - 2), 1).show();
}
}
Chronometer显示时间格式为00:00,如何你想改变格式,可以在onChronometerTick()中进行操作。对于如何获取运行的总时间,则通过totalTime++实现,但此时的totalTime和运行的总时间并不相符,因为start、stop都会触发onChronometerTick(),所以需要totalTime-2.