安卓提供了一个计时器的组件:Chronometer ,该组件继承自 TextView ,Chronometer 提供了一个 android:format 属性,用于指定计时器的计时格式。
Chronometer 常用方法
- setBase(long base) :设置计时器的起始时间
- setFormat(String format):设置显示时间格式
- start():开始计时
- stop():停止计时
- setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener):为计时器绑定事件监听器,当计时器改变时触发该监听器。
本案例效果图如下
布局文件代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
tools:context="pub.weber.bym.chronometer.MainActivity">
<Chronometer
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始"
/>
</LinearLayout>
MainActivity 代码如下
public class MainActivity extends AppCompatActivity {
Chronometer ch;
Button start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取计时器组件
ch = (Chronometer) findViewById(R.id.test);
start = (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 设置开始计时时间
ch.setBase(SystemClock.elapsedRealtime());
ch.start();
start.setEnabled(false);
}
});
ch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
// 如果开始计时到现在超过20s 停止计时
if (SystemClock.elapsedRealtime() - ch.getBase()> 20*1000){
ch.stop();
start.setEnabled(true);
}
}
});
}
}
程序中用到的 SystemClock
类 是一个获取系统时间、运行时间的工具类。。。。