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

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

数据视图(AngularJS)

<!DOCTYPE html><html ng-app="home.controller"><head><meta charset="utf-8"><title>数据视图</title><link href="page/common/css/bootstrap.min.css" rel="stylesheet"><script src="page/common/js/angular.js"></