一、关于Chronometer

在Android的SDK中,为我们提供了一个计时器,这个计时器称为Chronometer。其拥有以下方法:

1、getBase():返回时间;
2、setBase(long base):设置计时器的起始时间;
3、start():开始计时;
4、stop():停止计时;
5、setFormat(String format):设置显示时间的格式;
6、setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener):为计时器绑定监听事件。

注意点:我们在使用Chronometer的stop方法时,只是停止刷新计时器的时间显示,在后台并没有停止计时。我们再次恢复计时时,并不是从我们刚才停下的时间开始计时。为了实现真正的恢复计时,我们可以设置一个变量用于记录停止计时的时间。当我们再次恢复计时时,使用当SystemClock.elapsedRealtime()减去该变量,跳过已经记录时间即可。

二、activity_main.xml文件

整体布局为LinearLayout线性布局,第一个LinearLayout中包含Chronomete计时器用来显示时间;第二个LinearLayout包括四个时间控制按钮分别为:开始计时按钮begin,停止计时按钮end,恢复计时按钮goon和重置计时按钮reset。布局预览效果如下:

实际运行效果图如下:

activity_main.xml的源代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"android:gravity="center_horizontal"><Chronometerandroid:id="@+id/timer"android:textSize="25pt"android:layout_width="wrap_content"android:layout_height="wrap_content"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/begin"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="开始计时"/><Buttonandroid:id="@+id/end"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="停止计时" /><Buttonandroid:id="@+id/goon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="恢复计时"/><Buttonandroid:id="@+id/reset"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="重置计时"/></LinearLayout>
</LinearLayout>

三、MainActivity.java文件

1、定义变量

Chronometer ch;//计时器
Button begin;//开始计时按钮
Button end;//结束计时按钮
Button goon;//继续计时按钮
Button reset;//重置计时按钮
long recordingTime;//记录总时间

2、在onCreate方法中获取各按钮id和计时器Chronometer id(注意要与xml文件id名一一对应)

ch=(Chronometer)findViewById(R.id.timer);
begin=(Button)findViewById(R.id.begin);
end=(Button)findViewById(R.id.end);
goon=(Button)findViewById(R.id.goon);
reset=(Button)findViewById(R.id.reset);

3、设置四个计时按钮的监听事件
(1)开始计时按钮begin监听事件

begin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ch.setBase(SystemClock.elapsedRealtime()-recordingTime);//SystemClock.elapsedRealtime()获取的是系统开机到现在的时间,不能被修改ch.start();//开始计时begin.setEnabled(false);end.setEnabled(true);goon.setEnabled(false);reset.setEnabled(true);}});

(2)结束计时按钮end监听事件

end.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ch.stop();//停止计时recordingTime=SystemClock.elapsedRealtime()-ch.getBase();//保存当前停止的时间begin.setEnabled(false);goon.setEnabled(true);end.setEnabled(false);reset.setEnabled(true);}});

(3)恢复计时按钮goon监听事件

goon.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ch.start();begin.setEnabled(false);end.setEnabled(true);goon.setEnabled(false);reset.setEnabled(true);}});

(4)重置计时按钮reset监听事件

reset.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {recordingTime=0;//将当前时间置为0ch.start();ch.setBase(SystemClock.elapsedRealtime());begin.setEnabled(false);goon.setEnabled(false);end.setEnabled(true);reset.setEnabled(false);}});

注意点:各按钮监听事件中的setEnabled()函数:当setEnable(false)将控件能完全禁用,颜色会变灰色,无法响应任何触发事件;当setEnable(true)相当于激活按钮,可以通过触摸或点击产生触发事件。

其中完整MainActivity.java的源代码如下:

package com.wp.timer;import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;public class MainActivity extends AppCompatActivity{Chronometer ch;//计时器Button begin;//开始计时按钮Button end;//结束计时按钮Button goon;//继续计时按钮Button reset;//重置计时按钮long recordingTime;//记录总时间@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ch=(Chronometer)findViewById(R.id.timer);begin=(Button)findViewById(R.id.begin);end=(Button)findViewById(R.id.end);goon=(Button)findViewById(R.id.goon);reset=(Button)findViewById(R.id.reset);begin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ch.setBase(SystemClock.elapsedRealtime()-recordingTime);//SystemClock.elapsedRealtime()获取的是系统开机到现在的时间,不能被修改ch.start();//开始计时begin.setEnabled(false);end.setEnabled(true);goon.setEnabled(false);reset.setEnabled(true);}});end.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ch.stop();//停止计时recordingTime=SystemClock.elapsedRealtime()-ch.getBase();//保存当前停止的时间begin.setEnabled(false);goon.setEnabled(true);end.setEnabled(false);reset.setEnabled(true);}});goon.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ch.start();begin.setEnabled(false);end.setEnabled(true);goon.setEnabled(false);reset.setEnabled(true);}});reset.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {recordingTime=0;//将当前时间置为0ch.start();ch.setBase(SystemClock.elapsedRealtime());begin.setEnabled(false);goon.setEnabled(false);end.setEnabled(true);reset.setEnabled(false);}});ch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {//为Chronomter绑定事件监听器@Overridepublic void onChronometerTick(Chronometer chronometer) {if(SystemClock.elapsedRealtime()-ch.getBase()>3600*1000)//若计时超过了3600s=1 h即停止计时{ch.stop();begin.setEnabled(true);end.setEnabled(false);goon.setEnabled(false);}}});}
}

四、运行效果展示

1、开始计时

2、停止计时

恢复计时和重置技术效果展示不明显,可以自行实现观察效果。

Android手机简易计时器(Chronometer实现)相关推荐

  1. Android我自己的简易(秒表)计时器Chronometer

    Android我自己的简易(秒表)计时器Chronometer 就是一个简单的计时器 布局文件:activity_main.xml <LinearLayout xmlns:android=&qu ...

  2. Android 计时器 Chronometer

    Android 简单的计时器可以使用系统提供的方法Chronometer 下面是是实现的效果 Chronometer 的几个方法如下: 1  start(); 计时开始 2 stop(); 计时暂停 ...

  3. android调用手机自带计算器,Android实现简易的计算器

    本文实例为大家分享了Android实现简易的计算器的具体代码,供大家参考,具体内容如下 布局(activity_main.xml) xmlns:tools="http://schemas.a ...

  4. 计时器Chronometer和时钟(AnalogClock和DigitalClock)

    计时器Chronometer和时钟(AnalogClock和DigitalClock) (1)Android提供了两个时钟组件:AnalogClock和DigitalClock,DigitalCloc ...

  5. 疯狂足球——Android手机游戏开发(实习报告)

    实习是每一个大学毕业生必须拥有的一段经历,上学期暑期开始之前,我们系集体经历了一次短短的20几天的实习.为节约经费,实习的地点定为学校机房内,从某公司里请来了几个指导老师带领我们开发一个手机游戏-&q ...

  6. Android开发简易教程

    Android开发简易教程 Android 开发因为涉及到代码编辑.UI 布局.打包等工序,有一款好用的IDE非常重要.Google 最早提供了基于 Eclipse 的 ADT 作为开发工具,后来在2 ...

  7. JavaScript|拖拽|仿Android手机九点连线开锁

    最简单的JavaScript拖动代码 <script> var xx=0,yy=0; function a(v) { xx=event.x-v.offsetLeft; yy=event.y ...

  8. Android手机HC-05蓝牙连接Arduino nano获取DHT-11温湿度传感器数据

    如果您觉得本文对您有用,希望您点赞,收藏并且把它分享出去,不明白的可以在评论区留言,我会一一解答,感谢您的支持!! 目标 Android手机HC-05蓝牙连接Arduino nano获取DHT-11温 ...

  9. Android 手机自动化测试工具有哪几种?

    Android 手机自动化测试工具有哪几种? 3 条评论 分享 按投票排序按时间排序 28 个回答 78赞同 反对,不会显示你的姓名 知乎用户,https://github.com/truebit 孙 ...

  10. android rmvb格式下载,顶峰-Android手机视频转换器

    主要特点: 输入视频格式 支持视频如 RM,RMVB,AVI,MPEG,MPG,MKV,DAT,VOB,ASF,WMV,FLV,MOV,MP4,3GP,MTS,M2TS,MOD,TOD,F4V,TS, ...

最新文章

  1. python3.8安装tensorflow1.14时候报错Can‘t connect to HTTPS URL because the SSL module is not available
  2. java.util.UnknownFormatConversionException: Conversion = ''';
  3. python 将YOLO(txt)格式的标注数据批量转换为PascalVOC(XML)格式的标注数据
  4. kvm服务器中心管理,IP KVM如何在公共场所数据中心合理应用
  5. sap获取系统时间_获取系统当前时间
  6. 关于自定义异常中为什么带参构造器需要显示调用父类异常的带参构造器
  7. linux复制压缩包到另一个文件夹,linux复制文件到另一个文件夹或目录
  8. 解决Hibernate:could not initialize proxy - no Session
  9. 参数估计与假设检验—拒绝域的数学证明(手写)
  10. 为什么说图像的低频是轮廓,高频是噪声和细节
  11. X86汇编语言学习手记(1)
  12. 企业获客的五种方式解读
  13. Linux过来人帮你理清学习思路
  14. ffmpeg+easydarwin+ffplay实现直播推拉流
  15. 控制I/O设备四种方式
  16. 刘未鹏之思维改变生活!
  17. 软件测试自学怎么学?【史上最详细学习路线】(附全套资料)
  18. 美化WinForm第三方框架DevExpress
  19. java swing GUI 模拟写字板项目源码,适合初级小白
  20. Android_xml背景色的值

热门文章

  1. 工商银行c语言笔试题,【中国工商银行研发软件笔试试题及答案】 - 面试网
  2. C语言输出菱形不是梦
  3. 2022华为杯研赛E题草原放牧策略研究代码+思路
  4. windows权限提升——烂土豆+dll劫持+引号路径+服务权限
  5. Excel如何制作直方图与正态分布曲线
  6. 二进制算法问题解析——1000瓶药水,1瓶有毒药,几只小白鼠能够找出?
  7. 慧翔PMP培训及感想
  8. 苹果开发者公司账号注册流程注册新的苹果Apple Id并双重验证步骤
  9. XCTF 3rd-HITB CTF-2017 arrdeepee 复现
  10. 用html给图片加像素,更改照片像素和大小