Android手机简易计时器(Chronometer实现)

9 篇文章 19 订阅
订阅专栏

一、关于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">
    <Chronometer
        android:id="@+id/timer"
        android:textSize="25pt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/begin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="开始计时"/>

        <Button
            android:id="@+id/end"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="停止计时" />
        <Button
            android:id="@+id/goon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="恢复计时"/>
        <Button
            android: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() {
            @Override
            public 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() {
            @Override
            public 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() {
            @Override
            public 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() {
            @Override
            public void onClick(View v) {
                recordingTime=0;//将当前时间置为0
                ch.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;//记录总时间
    @Override
    protected 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() {
            @Override
            public 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() {
            @Override
            public 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() {
            @Override
            public void onClick(View v) {
                ch.start();
                begin.setEnabled(false);
                end.setEnabled(true);
                goon.setEnabled(false);
                reset.setEnabled(true);
            }
        });
        reset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                recordingTime=0;//将当前时间置为0
                ch.start();
                ch.setBase(SystemClock.elapsedRealtime());
                begin.setEnabled(false);
                goon.setEnabled(false);
                end.setEnabled(true);
                reset.setEnabled(false);
            }
        });
        ch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {//为Chronomter绑定事件监听器
            @Override
            public 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入门第22天-Android里的计时器Chronometer的使用
lifetragedy的专栏
11-10 1517
Android里的计时器Chronometer的使用
AndroidChronometer
I_do_can的博客
06-07 4336
本文只是记录一些零碎的东西 google API 的路径:android/widget/Chronometer.html#setFormat(java.lang.String)( 今天被墙了) Chronometer是TextView的子类,这个组件可以用1秒的时间间隔进行计时,并显示出计时结果。 Chronometer类有3个重要的方法:start、stop和setBase
Android利用Chronometer实现倒计时功能
09-01
主要为大家详细介绍了Android利用Chronometer实现倒计时功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
android利用Chronometer实现倒计时(已封装,可直接使用)
02-08
项目需要实现一个计时的功能,利用Chronometer虽然可以很方便的实现计时功能,但需要的却是一个倒计时控件. 百度了一下方法不少,倒计时的却没有,于是用Chronometer封装了一个倒计时的类,本着开源的精神,分享给大家!
android设置实现广告倒计时功能
最新发布
超级博客
09-17 983
要使用 CountDownTimer,你需要创建一个继承自 CountDownTimer 的匿名内部类或单独的类,并重写其两个方法:onTick() 和 onFinish()。onFinish() 方法会在计时结束时被调用,用于执行倒计时结束后的操作。在onResume()方法中启动广告计时器,在onDestroy()方法中取消广告计时器。在Android中,CountDownTimer 是一个用于计时的类,它允许你在指定的时间段内执行某些操作。重写 onFinish 方法,该方法将在倒计时结束时触发。
Android控件之Chronometer(定时器)
weixin_34377919的博客
10-05 182
  Chronometer是一个简单的定时器,你可以给它一个开始时间,并以此定时,或者如果你不给它一个开始时间,它将会使用你的时间通话开始。默认情况下它会显示在当前定时器的值的形式“分:秒”或“H:MM:SS的”,或者可以使用的Set(字符串)格式的定时器值到一个任意字符串 1.重要属性 android:format:定义时间的格式如:hh:mm:ss 2.重要方法 setBase(lon...
android 中文 api (43) —— Chronometer
weixin_34255793的博客
11-22 85
前言   本章内容是 android.widget.Chronometer,译为"计时器",版本为Android 2.2 r1 。期待你一起参与Android API 的中文翻译,联系我over140@gmail.com。   声明   欢迎转载,但请保留文章原始出处:)       农民伯伯:http://over140.blog.51cto.com/     Android中文...
Android Chronometer计时器
本然233的博客
11-08 1138
转自:Android Chronometer计时器android提供了一个计时器组件——Chronometer,继承自TextView。显示的是某个时间点开始以及之后的时间增加。 在XML中配置: &lt;Chronometer android:layout_width="wrap_content" android:layout_height="wrap_...
Android Chronometer
Errol's Blog
03-21 720
计时器chronometer继承自TextView,显示的是从一个起始时间开始,一共过去了多长时间 属性只有一个format,用于指定计时器的计时格式 布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" ...
Android控件开发之Chronometer
热门推荐
sun6255028的专栏
08-15 2万+
Chronometr是一个简单的定时器,你可以给它一个开始时间,并以此定时,或者如果你不给它一个开始时间, 它将会使用你的时间通话开始。默认情况下它会显示在当前定时器的值得形式"分:秒" 或"MM:SS",  或者可以使用set(字符串)的定时器值到一个任意字符串
Android编程之计时器Chronometer简单示例
01-20
Android开发中,Chronometer控件是一个非常实用的组件,它用于实现计时功能,类似于我们日常生活中的秒表。Chronometer直接继承自TextView,因此它不仅具备文本显示的功能,还能实时更新显示计时的结果。本篇文章...
Android计时器chronometer使用实例讲解
09-02
总的来说,ChronometerAndroid开发者用来创建计时功能的便捷工具,通过结合不同的方法和监听器,我们可以实现丰富的计时功能,满足各种应用场景的需求。在实际开发中,根据项目需求,可以进一步扩展 Chronometer ...
Android 计时器组件 Chronometer 的使用
weixin_42602900的博客
10-14 1338
在安卓开发过程中经常需要计数器的使用,我们可以用handler实现间隔性的操作。 例如按两次返回back退出,隔几秒重复换页面等。 但是也经常有一类需求类是打电话时候记录时长的操作。 这就用到了androidandroid.widget包下的Chronometer 这个组件。 Chronometer介绍 Class that implements a simple timer. * <p> * You can give it a start time in the {@link..
Android 计时器 Chronometer
小牧在一直在学习,在前进的道路上大家一起学习,进步。
01-14 952
Android 简单的计时器可以使用系统提供的方法Chronometer 下面是是实现的效果 Chronometer 的几个方法如下: 1 start(); 计时开始 2 stop(); 计时暂停 3setBase设置计时时间 4setFormat 设置时间格式 5setOnChronometerTickListener 计时监听 下面写一个demo 在xml 中布局: <?xml version="1.0" encoding="utf-8"?> <...
Android Chronometer控件
假装你是大灰狼的专栏
11-13 1万+
1. ChronometerChronometer是一个简单的计时器。 主要配置 format,显示格式,默认是&amp;amp;quot;MM:SS&amp;amp;quot;或&amp;amp;quot;H:MM:SS&amp;amp;quot;,以%s来格式化。 countDown,是否倒计时,与base时间相比较 主要方法 start,开始计时 stop,停止计时 setBase,设置计时基准时间 setFormat,设置显示格式
Android 计时器Chronometer 使用及源码分析,常见移动app开发框架
m0_66155412的博客
01-17 985
主界面布局文件 仅保留Chronometer相关布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/androidandroid:layout_width=“match_parent” android:layout_height=“match_parent” android:orientation.
Android中的Chronometer
zwq1457的专栏
01-07 971
这个例子演示的是点击按钮之后,计数增长,到20后自动停止 其中main.xml代码为: 1 xml version="1.0" encoding="utf-8"?> 2 LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fi
Android Chronometer计时器
weixin_34320159的博客
05-24 102
为什么80%的码农都做不了架构师?>>> ...
写文章

热门文章

  • 图像处理之图像质量评价指标PSNR(峰值信噪比) 92767
  • 导包问题解决--ImportError: DLL load failed while importing _path: 找不到指定的模块 63991
  • PyCharm及python解释器详细安装教程 52789
  • 图像处理之理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器的matlab实现去噪 50951
  • 冒泡排序算法 49776

分类专栏

  • 图像处理 47篇
  • 软件安装 18篇
  • Java 57篇
  • 数据结构 41篇
  • 软件工程 3篇
  • 杂记 17篇
  • 考研 10篇
  • 机器学习 1篇
  • Python 34篇
  • Android 9篇
  • MySQL 12篇
  • 操作系统 9篇
  • 编译原理 4篇
  • 计算机网络 3篇
  • 软件测试 1篇
  • 前端 1篇
  • JSP 5篇
  • 设计模式 2篇
  • LeetCode 115篇

最新评论

  • 图像处理之《用于统一源跟踪和深度伪造检测的深度可分离水印SepMark》论文精读

    qlu_cs0080: 这种水印的形式不好做吗

  • 图像处理之《用于统一源跟踪和深度伪造检测的深度可分离水印SepMark》论文精读

    辣椒日记: 我现在做的主要是Deepfake的被动检测,不是这种水印的形式了

  • Android实验(Activity生命周期/各种控件/各种布局/选项菜单、Actionbar、Toolbar与Fragment/Intent和Activity/ Service和Thread )

    寻找生命的可能: 代码不完整

  • 图像处理之matlab中meshgrid函数用法详解

    轩铭是也: 作者没错

  • 图像处理之《用于统一源跟踪和深度伪造检测的深度可分离水印SepMark》论文精读

    qlu_cs0080: 我是做这个方向的,可以一起交流下

大家在看

  • 背包九讲——完全背包问题 1015
  • [NeetCode 150] Subtree of a Binary Tree 470
  • 报考PMP需要什么条件?考证流程是怎样?
  • 【毕设】药店管理系统JAVA-springboot 330
  • java+vue计算机毕设点餐系统【开题+程序+论文+源码】

最新文章

  • 图像处理之《生成式隐写研究》论文阅读
  • 图像处理之《寻找和隐藏:通过深度强化学习的对抗隐写术》论文阅读
  • 图像处理之《生成隐写术中秘密到图像的可逆变换》论文阅读
2024年15篇
2023年15篇
2022年84篇
2021年149篇
2020年95篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家广东商场美陈生产企业天津创意玻璃钢雕塑优势四川特色商场美陈费用吉林玻璃钢雕塑工程施工玻璃钢花盆机械化生产抽象玻璃钢景观雕塑制造温州耐高温玻璃钢雕塑摆件佛山玻璃钢鼠年雕塑福建商场主题创意商业美陈思路山西多彩玻璃钢雕塑销售电话深圳玻璃钢雕塑摆件价钱水泥雕塑和玻璃钢雕塑上海玻璃钢卡通雕塑厂家推广石家庄玻璃钢卡通雕塑生产厂家成都玻璃钢花盆制造工业玻璃钢花盆销售信阳玻璃钢雕塑制作厂家溧阳商场美陈布置新乡彩绘玻璃钢雕塑商场玻璃钢雕塑摆件设计企业西安环保玻璃钢雕塑品质玻璃钢雕塑推荐厂家上海玻璃钢雕塑联系方式金昌玻璃钢花盆玻璃钢地貌图雕塑批发陕西公园玻璃钢雕塑哪家便宜福建动物雕塑玻璃钢图片福建玻璃钢花盆雕塑河北商场美陈厂家直销郑州人物玻璃钢彩绘雕塑设计香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化