使用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")@Overrideprotected 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();}@Overridepublic 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();}}@Overridepublic void onChronometerTick(Chronometer chronometer) {long tp = System.currentTimeMillis();this.chronometer.setText(sdf.format(new Date(tp – time)));}}layout布局:

<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Chronometerandroid:id="@+id/chronometer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:gravity="center"android:text="Chronometer"android:textSize="35sp" /><Buttonandroid:id="@+id/start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:layout_marginBottom="76dp"android:layout_marginLeft="34dp"android:text="start" /><Buttonandroid:id="@+id/stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/start"android:layout_alignBottom="@+id/start"android:layout_centerHorizontal="true"android:text="stop" /><Buttonandroid:id="@+id/reset"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/stop"android:layout_alignBottom="@+id/stop"android:layout_marginLeft="22dp"android:layout_toRightOf="@+id/stop"android:text="reset" /></RelativeLayout>

我不敢说我明天便可以做一个快乐的人,面朝大海春暖花开。

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

相关文章:

你感兴趣的文章:

标签云: