Android Chronometer控件
1. Chronometer类
Chronometer
是一个简单的计时器。
主要配置
format
,显示格式,默认是"MM:SS"或"H:MM:SS",以%s来格式化。countDown
,是否倒计时,与base
时间相比较
主要方法
start()
,开始计时stop()
,停止计时setBase(long)
,设置计时基准时间setFormat(String)
,设置显示格式setCountDown(boolean)
,设置是否是倒计时,只有版本大于24才有效setOnChronometerTickListener(OnChronometerTickListener)
,设置监听器
实例代码
mChronometer.setBase(SystemClock.elapsedRealtime());
mChronometer.setFormat("计时开始 %s");
mChronometer.start();
效果如下
2. Chronometer代码分析
start()
和stop()
方法修改了mStarted
的状态,然后调用updateRunning()
。
Chronometer
状态由三部分组成,mVisible
(Window是否可见)、mStarted
(Chronometer
开始计时)和isShown
(View
是否可见)。如果状态变化,修改当前控件。updateText(long)
修改界面,dispatchChronometerTick()
触发监听事件。postDelayed(Runnable, long)
在一秒后修改界面。
public void start() {mStarted = true;updateRunning();
}public void stop() {mStarted = false;updateRunning();
}private void updateRunning() {boolean running = mVisible && mStarted && isShown();if (running != mRunning) {if (running) {updateText(SystemClock.elapsedRealtime());dispatchChronometerTick();postDelayed(mTickRunnable, 1000);} else {removeCallbacks(mTickRunnable);}mRunning = running;}
}private final Runnable mTickRunnable = new Runnable() {@Overridepublic void run() {if (mRunning) {updateText(SystemClock.elapsedRealtime());dispatchChronometerTick();postDelayed(mTickRunnable, 1000);}}
};
updateText(long)
修改当前界面,首先拿当前时间和mBase
时间作比较,second
是两种之间的差值。DateUtils
把second
格式化,一般是"MM:SS"或"H:MM:SS",输出text
。如果定义了format格式,利用Formatter
将text
进一步格式化。
private synchronized void updateText(long now) {mNow = now;long seconds = mCountDown ? mBase - now : now - mBase;seconds /= 1000;boolean negative = false;if (seconds < 0) {seconds = -seconds;negative = true;}String text = DateUtils.formatElapsedTime(mRecycle, seconds);if (negative) {text = getResources().getString(R.string.negative_duration, text);}if (mFormat != null) {Locale loc = Locale.getDefault();if (mFormatter == null || !loc.equals(mFormatterLocale)) {mFormatterLocale = loc;mFormatter = new Formatter(mFormatBuilder, loc);}mFormatBuilder.setLength(0);mFormatterArgs[0] = text;try {mFormatter.format(mFormat, mFormatterArgs);text = mFormatBuilder.toString();} catch (IllegalFormatException ex) {if (!mLogged) {Log.w(TAG, "Illegal format string: " + mFormat);mLogged = true;}}}setText(text);
}
dispatchChronometerTick()
触发监听事件。
void dispatchChronometerTick() {if (mOnChronometerTickListener != null) {mOnChronometerTickListener.onChronometerTick(this);}
}
setFormat(String)
设置显示格式
public void setFormat(String format) {mFormat = format;if (format != null && mFormatBuilder == null) {mFormatBuilder = new StringBuilder(format.length() * 2);}
}
setBase(long)
设置计时基准时间
public void setBase(long base) {mBase = base;dispatchChronometerTick();updateText(SystemClock.elapsedRealtime());
}
相关文章
Android Picker控件
Android Clock控件
Android Chronometer控件
Android Handler类
Java Formatter类
Android Chronometer控件相关推荐
- Android Clock控件
1. AnalogClock模拟时钟 属性配置 dial,表盘背景 hand_hour,时针图片 hand_minute,秒针图片 配置文件 <AnalogClockandroid:layout ...
- Chronometer控件实现的Android计时器
本文为大家演示了如何使用Chronometer控件实现Android计时器的实例. 先贴上最终的实现效果图: Android计时器实现思路 使用Chronometer控件实现计器的操作.通过设置set ...
- 系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab
[索引页] [×××] 系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab, Spi ...
- Android神奇“控件”-----RemoteViews
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明 http://blog.csdn.net/wrg_20100512/article/details/53940485 好 ...
- Android 原生控件之一 TextView
Android 原生控件之一 TextView 前言 来源 开始 XML属性 1.android:allowUndo 2.android:autoLink 3.android:autoSizeMaxT ...
- 【Android从零单排系列十一】《Android视图控件——日历、日期、时间选择控件》
目录 一.日历.日期.时间组件基本介绍 二.几种常见的控件类型 1.CalendarView –日历控件 2. DatePicker –日期选择控件 3.TimePicker –时间选择控件 4.Ch ...
- Android开源控件ViewPager Indicator的使用方法
1月16日厦门 OSC 源创会火热报名中,奖品多多哦 摘要 Android开源控件ViewPager Indicator的使用介绍 ViewPagerIndicator 目录[-] 1. V ...
- 日历控件的android代码,Android日历控件PickTime代码实例
Android日历控件PickTime代码实例 发布时间:2020-10-03 16:05:51 来源:脚本之家 阅读:86 作者:手撕高达的村长 最近做项目,需要设置用户的生日,所以做这样一个功能. ...
- android 获取控件高度_安卓开发入门教程UI控件_ImageView
什么是ImageView ImageView是用于显示图片的UI控件. 基础样例 1.展示本地图片 效果图 代码 <ImageViewandroid:layout_width="wra ...
最新文章
- 七基于Fourinone实现MQ demo
- Python(数据库之表操作)
- 一日千里 云计算普及势不可挡
- java friendly 子包,黑馬程序員 java 修飾符類型(public,protected,private,friendly)
- stm32 led屏控制卡_室内LED显示屏如何安装?
- 2020最新Java线程池入门(超详细)
- Ubuntu 16.04 + Nginx + Django 项目部署
- 【arthas】Arthas 查看 Mbean 的信息
- Oracle 11g-R2 SQL Developer连接MSSQL2008
- nvidia-rapids︱cuGraph(NetworkX-like)关系图模型
- SQLHelper类方法介绍及简单使用
- 解决Mac系统读写NTFS格式移动硬盘
- 【正点原子STM32连载】 第六十四章 综合测试实验摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
- 【资损】系统迭代过程中的兼容性设计
- 不做自了汉,大家好才是真的好
- Hadoop安装与环境配置
- Matlab2017a中帮助文档无法设置为中文的一种解决办法
- [附源码]java毕业设计校园征兵及退役复原管理系统
- Java二维数组详解:二维数组的声明和初始化,以及获取二维数组的值
- SSH服务端配置、优化加速、安全防护