使用chronometer显示hh:mm:ss格式的计时

今天想到写一个计时器,看到了android 的chronometer组件,api上说他是一个计时类组件,能够调用start方法定时对其更新,stop方法对其停止。

我的需求是写成一个能够计时成hh:mm:ss格式的计时组件,开始脑袋有点晕,看到了setFormat()这个方法,以为他能够满足我的需求,谁知道只是%s用来代替mm:ss这个显示而已。研读api发现了setText()和事件监听onChronometerTick()这两个方法,ok,思路来了。


package com.example.chronometertest;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;


/**
 * 
 * 
 * 经过测试Chronometer组件在更新计时数据的时候有问题
 * 显示的格式只能为MM:SS
 * 我想要更改格式为HH:MM:SS, 看api中有setFormat()中只能设置为“输入字符”+%s , %s代表了MM:SS
 * 
 */

public class MainActivity extends Activity implements OnClickListener, OnChronometerTickListener{

	private Chronometer chronometer;
	private Button startButton;
	private Button stopButton;
	private Button resetButton;
	private SimpleDateFormat sdf;
	private long time;
	@SuppressLint("SimpleDateFormat")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		this.chronometer = (Chronometer)super.findViewById(R.id.chronometer);
		this.chronometer.setOnChronometerTickListener(this);
		
		
		this.startButton = (Button)super.findViewById(R.id.start);
		this.startButton.setOnClickListener(this);
		this.stopButton = (Button)super.findViewById(R.id.stop);
		this.stopButton.setOnClickListener(this);
		this.resetButton = (Button)super.findViewById(R.id.reset);
		this.resetButton.setOnClickListener(this);
		
/**		
 * 		这里完美是个坑啊!
 * 		注意HH是24小时,如果带进0,也就是想要让时间变为00:00:00
 * 		必须要是24小时制的
 *      而分钟和秒钟,是需要按SimpleDateFormat的api来固定设置的
 */
		
		sdf = new SimpleDateFormat("HH:mm:ss");
		
//		获取当前的时间
		time = System.currentTimeMillis();
		
	}


	@Override
	public void onClick(View v) {
		if(v.getId() == R.id.start){
			this.time = System.currentTimeMillis();
			this.chronometer.start();
		}else if(v.getId() == R.id.stop){
			this.chronometer.stop();
		}else if(v.getId() == R.id.reset){
			this.chronometer.setBase(SystemClock.elapsedRealtime());
			this.chronometer.setText("00:00:00");
			this.chronometer.stop();
		}
	}

	@Override
	public void onChronometerTick(Chronometer chronometer) {
		
		long tp = System.currentTimeMillis();
		this.chronometer.setText(sdf.format(new Date(tp - time)));
	}

}
layout布局:



    

    


你可能感兴趣的:(android)