chronometer计时器实现暂停功能与初始值为0的功能

时间:2021-08-22 20:35:53

<pre name="code" class="html" style="font-size: 18px; "><span style="font-family: 'Microsoft YaHei'; ">通过chronometer组件,实现了一个完善的计时器,含有暂停功能,还有初始值为0的功能~~~大家如果有什么问题,可以提出来,相互学习一下哈O(∩_∩)O~</span>

 

<strong>以下是xml文件:</strong>
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"</span>
<span style="font-size:18px;">    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity" >    <TextView        android:id="@+id/timer"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_marginBottom="20dp"        android:layout_marginTop="10dp"        android:text="获得计时的时间"        android:textSize="25sp" />    <Chronometer        android:id="@+id/chronometer"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/timer"        android:layout_centerHorizontal="true"        android:text="Chronometer"        android:textSize="30sp" />    <Button        android:id="@+id/start"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/chronometer"        android:layout_centerHorizontal="true"        android:layout_marginTop="20dp"        android:text="开始计时" />    <Button        android:id="@+id/pause"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/start"        android:layout_centerHorizontal="true"        android:text="暂停计时" />    <Button        android:id="@+id/reset"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/pause"        android:layout_centerHorizontal="true"        android:text="重置时间" />    <Button        android:id="@+id/stop"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/reset"        android:layout_centerHorizontal="true"        android:text="停止计时" /></RelativeLayout></span>

 以下是java源代码:

package com.xu.xu_chronometer;

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
private TextView timer;
private Button start;
private Button pause;
private Button reset;
private Button stop;
private Chronometer chronometer;
private boolean isPause = false; // 用于判断是否为暂停状态

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timer = (TextView) findViewById(R.id.timer);
pause = (Button) findViewById(R.id.pause);
start = (Button) findViewById(R.id.start);
reset = (Button) findViewById(R.id.reset);
stop = (Button) findViewById(R.id.stop);
chronometer = (Chronometer) findViewById(R.id.chronometer);

// 注册监听器
start.setOnClickListener(this);
pause.setOnClickListener(this);
reset.setOnClickListener(this);
stop.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start:
// 保证什么时候开始,计时的时间都是从0开始计时
chronometer.start();
chronometer.setBase(SystemClock.elapsedRealtime());
break;
case R.id.pause:
// 实现了计时的暂停功能
// 如果不是处于暂停状态,则停止计时
// 如果处于暂停状态,则通过计算,从暂停的那个时间段开始计时
if (!isPause) {
chronometer.stop();
isPause = true;
pause.setText("继续计时");
} else {
Double temp = Double.parseDouble(chronometer.getText()
.toString().split(":")[1]) * 1000;
chronometer
.setBase((long) (SystemClock.elapsedRealtime() - temp));
chronometer.start();
pauseText();
}
break;
case R.id.reset:
// chronometer.start();这句是为了防止点击暂停键后,chronometer处于stop()状态,不能计时
chronometer.start();
chronometer.setBase(SystemClock.elapsedRealtime());
pauseText();
break;
case R.id.stop:
// 停止后,使时间归零
chronometer.stop();
chronometer.setBase(SystemClock.elapsedRealtime());
pauseText();
timer.setText("获得的时间为:" + chronometer.getText().toString());
break;

default:
break;
}
}

// 设置处于暂停状态时,pause按钮的文字显示
public void pauseText() {
if (isPause) {
pause.setText("暂停计时");
isPause = false;
}
}

}


下载地址:http://download.csdn.net/detail/u014026488/7813503