<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;
}
}
}