Android基础视图组件之计时器( Chronometer )

2024-02-09 13:18

本文主要是介绍Android基础视图组件之计时器( Chronometer ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

安卓系统是内置了计时器(Chronometer)的,但是不很强大,只能显示以秒为单位的计时。如果要具体到毫秒级,就要自己写方法实现了。因为Chronometer这个组件灰常简单,提供的api方法也少,可直接通过例子了解。


计时器(Chronometer)的核心方法有:

start()   //开始计时

stop() //结束计时

setBase() //设置开始时间,一般使用SystemClock.elapsedRealtime()获取当前开始的时间,从00 : 00开始计时

setFormat() //设置计时格式, 比如setFormat( "计时开始:%s" );  //s%就是默认的 MM : SS格式

setOnChronometerTickListenter() //设置计时器的监听器,当计时的值改变会调用这个监听器;如果要清除所添加的监听器,使用setOnChronometerTickListener(null)即可。


先上个演示图:



布局XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent" android:layout_height="match_parent"><LinearLayoutandroid:id="@+id/ll_frg_ob_main"android:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal"><Buttonandroid:id="@+id/btn_ob_start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开始"/><Buttonandroid:id="@+id/btn_ob_cancel"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="结束"android:layout_marginLeft="20dp"/><Buttonandroid:id="@+id/btn_ob_wait"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="三秒后自动结束"android:layout_marginLeft="20dp"/></LinearLayout><Chronometerandroid:id="@+id/chron_main"android:layout_width="match_parent"android:layout_height="80dp"android:layout_below="@+id/ll_frg_ob_main"android:layout_marginTop="20dp"android:gravity="center"android:textSize="18sp"android:background="#DDDDDD"/></RelativeLayout>


主类Activity的核心方法:

/*** 设定3秒后自动结束计时器*/private void setTickListener(){//添加监听器,每次计时器的时间改变都会触发这个监听器,3秒后自动结束chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {@Overridepublic void onChronometerTick(Chronometer chronometer) {if(SystemClock.elapsedRealtime() - chronometer.getBase() >= 3000){chronometer.stop();}}});}private class MyOnClickListener implements View.OnClickListener{@Overridepublic void onClick(View v){if(v == btn_start){//去除添加的监听器,因为setTickListener()方法中添加的监听器如果不被去除,会一直限制在3秒自动结束。chronometer.setOnChronometerTickListener(null);//设置开始计时的时间点chronometer.setBase(SystemClock.elapsedRealtime());//开始计时,默认样式是 00:00chronometer.start();}else if(v == btn_cancel){//停止计时chronometer.stop();}else if(v == btn_wait){chronometer.stop();chronometer.setBase(SystemClock.elapsedRealtime());setTickListener();chronometer.start();}}}

上面就是计时器( Chronometer )的使用过程。Chronometer 只能满足一般的使用场景,而且也不是常用的组件。如果要实现比如精确到毫秒,或者复杂格式的计时器,就要考虑用自定义的一系列方法去实时计时,并把计时的结果不断刷新写入要显示数字的组件( 比如TextView )中。

为什么要这么做?我们去看看Chronometer的源码,就会发现其实计时器是继承了TextView的子类,本质上其实也是一个文本框,至于它如何实现逐秒逐秒的计时,也是使用了sendMessageDelayed(Message.obtain(this, TICK_WHAT), 1000);这样的方法去计时,用handler每次延时1秒去发送信息,然后刷新计时的结果,就成了我们在视图所看到的一秒一秒增加的效果。了解了这个过程,要自己去实现计时器,也就不难了吧。



这篇关于Android基础视图组件之计时器( Chronometer )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694329

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4