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

相关文章

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle