前端时间公司项目需要使用倒计时。我在网上搜了一阵子,发现网上大部分都是 启动一个子线程 ,然后TextView 显示。 这种方式引起的两个问题:

1.  子线程写在外面,导致代码有点乱。

2.  倒计时如果在adapter中,实现起来比较麻烦。

刚好我们的倒计时是在adapter中。最后,我通过自定义view,继承 TextView,使用  CountDownTimer 。 把倒计时放在view中。外部调用只需要传入总时长就好了。下面是代码部分(使用的是kotlin)

class MyCountDownTimer : TextView {private var countTime = 0Lprivate var countDownTimer: MyCountDownTimer? = nullprivate var mContext: Context? = contextconstructor (context: Context?) : this(context, null)constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {mContext = context}//设置数据fun setTime(time: Int) {if (time <= 0) {return}this.countTime = time * 1000Lif (countDownTimer != null) {stopTimer()}startTimer()}//计时器private inner class MyCountDownTimer(totleTime: Long, durTime: Long) : CountDownTimer(totleTime, durTime) {override fun onFinish() {stopTimer()}override fun onTick(millisUntilFinished: Long) {var timeStr = getTimeByLong(millisUntilFinished / 1000)Log.i("111", timeStr)text = timeStr}}// hh:mm:ssvar hour = 60 * 60var minute = 60fun getTimeByLong(time: Long): String {var timeStr = "00:00:00"if(time > 0){val h = time / hourval m = time % hour / minuteval s = time % minutetimeStr = String.format("%02d:%02d:%02d",h,m,s)}return  timeStr}private fun startTimer() {countDownTimer = MyCountDownTimer(countTime, 1000)countDownTimer!!.start()}private fun stopTimer() {if (countDownTimer != null) {countDownTimer!!.cancel()countDownTimer = null}}override fun onDetachedFromWindow() {super.onDetachedFromWindow()stopTimer()}
}

考虑到很多软件的倒计时有背景色之类的,可以用  BackgroundColorSpan  将字符串进行处理后再展示。具体的根据实际需要进行修改

PS: 第一次写东西,不喜勿喷。欢迎交流

Android 自定义计时器相关推荐

  1. Android Wear计时器开发

    记得在2013年12月的时候,有系列文章是介绍怎么开发一个智能手表的App,让用户可以在足球比赛中记录停表时间.随着Android Wear的问世,在可穿戴设备中开发一款这样的App确实是个很不错的想 ...

  2. 安卓自定义计时器控件

    目录 前言 一.项目效果展示 二.自定义TextView 2.1 自定义属性 2.2 配置属性 三.实现计时器 3.1 技术选型 3.2 代码实现 四.具体使用 4.1 布局引用 4.2 API调用 ...

  3. android自定义秒表,Android自定义Chronometer实现短信验证码秒表倒计时功能

    本文实例为大家分享了Chronometer实现倒计时功能,Android提供了实现按照秒计时的API,供大家参考,具体内容如下 一.自定义ChronometerView 继续自TextView 主要原 ...

  4. android 短信验证计时,Android自定义Chronometer实现短信验证码秒表倒计时功能

    本文实例为大家分享了chronometer实现倒计时功能,android提供了实现按照秒计时的api,供大家参考,具体内容如下 一.自定义chronometerview 继续自textview 主要原 ...

  5. Android自定义ViewGroup基本步骤

    1.自定义属性,获取自定义属性,可参考 ​ Android自定义View基本步骤 ​ 2.onMeasure() 方法,for循环测量子View,根据子View的宽高来计算自己的宽 高 3.onDra ...

  6. Android自定义View —— TypedArray

    在上一篇中Android 自定义View Canvas -- Bitmap写到了TypedArray 这个属性 下面也简单的说一下TypedArray的使用 TypedArray 的作用: 用于从该结 ...

  7. Android 自定义View —— Canvas

    上一篇在android 自定义view Paint 里面 说了几种常见的Point 属性 绘制图形的时候下面总有一个canvas ,Canvas 是是画布 上面可以绘制点,线,正方形,圆,等等,需要和 ...

  8. android 自定义loading,Android自定义动画-StarLoadingView

    今天来分享第二个自定义loading的动画,起了个名字叫 蹦跶的星星 ,还是老规矩先介绍,后上图. 实现效果在最后,GIF有点大,手机流量慎重. 介绍 首先声明做这个动画的初衷是为了学习和分享,所以从 ...

  9. android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...

    转载:http://blog.csdn.net/xiabing082/article/details/48781489 1.  大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...

最新文章

  1. 客户端(C#)调用CXF搭建的webservice的出现一些问题记录
  2. 阿里云推荐码:8N6TBT
  3. constraint的一些用法总结
  4. net4.0 兼容2.0的方法
  5. 视图view的生命周期的一点见解
  6. Android 阅读器架构图,网上收集,留做存货
  7. Redis常见配置介绍
  8. CentOS 7 安装 Scrapy 记录
  9. [选择性翻译][HDP Ambari 2.2.2安装使用说明][1]
  10. C#弹出窗体、C#导出Excel、C#数据展示框、C#弹出框
  11. HTML5七夕情人节表白网页制作【生日快乐粒子烟花】HTML+CSS+JavaScript 生日祝福网页代码
  12. FIL带给IPFS的创新
  13. 原生js实现上拉加载
  14. ScriptManager和ClientScript的区别
  15. 小爱音箱显示服务器连接不上,小爱音箱为什么连不上网络
  16. s5pv210 i2c 时序
  17. vue3+h5实现手写签名
  18. 能够将图片转化为文字的简便操作软件有什么?
  19. f2fs mkfs 格式化过程系列 1
  20. 计算机word如何排序,蓝瘦!Word排序太难 小编教你这么办

热门文章

  1. win10 的计算机配置要求,详细教你windows10的配置要求
  2. 知乎:在卡内基梅隆大学 (Carnegie Mellon University) 就读是怎样一番体验?
  3. 大V科技谈 | VMware利用先进的自动化技术,简化混合办公模式
  4. python设置word背景色_Java 给Word不同页面设置不同背景
  5. VUE2使用的JSON编辑器
  6. FileZilla FTP服务器源代码分析
  7. 【第84期】对话智能风控
  8. 电磁场与仿真软件(20)
  9. 初级者与转行者,大数据如何学习最高效,简历该如何优化?
  10. css 延时几秒代码,CSS3 会聚展开文字动画实例及animation-delay属性规则