1.效果图

2.主页

package com.example.myapplication24import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.CountDownTimer
import android.widget.*
import androidx.core.view.isVisible
import kotlinx.android.synthetic.main.activity_main.*
import java.util.concurrent.TimeUnitclass MainActivity : AppCompatActivity() {//参考网址:https://github.com/KrithikAjay/CountDownTimerprivate var timeCountInMilliSeconds = 60000Lprivate enum class TimerStatus {STARTED, STOPPED}private var timerStatus = TimerStatus.STOPPEDprivate lateinit var countDownTimer: CountDownTimeroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)imageViewReset.setOnClickListener {reset()}imageViewStartStop.setOnClickListener {startStop()}}private fun reset() {stopCountDownTimer()startCountDownTimer()}private fun startStop() {if (timerStatus == TimerStatus.STOPPED) {setTimerValues()setProgressBarValues()imageViewReset.isVisible = trueimageViewStartStop.setImageResource(R.drawable.icon_stop)editTextMinute.isEnabled = falsetimerStatus = TimerStatus.STARTEDstartCountDownTimer()} else {imageViewReset.isVisible = falseimageViewStartStop.setImageResource(R.drawable.icon_start)editTextMinute.setEnabled(true)timerStatus = TimerStatus.STOPPEDstopCountDownTimer()}}private fun setTimerValues() {var time = 0if (editTextMinute.text != null) {time = (editTextMinute.text.toString().trim()).toInt()} else {Toast.makeText(this, R.string.message_minutes, Toast.LENGTH_SHORT).show();}timeCountInMilliSeconds = (time * 60 * 1000).toLong()}private fun startCountDownTimer() {countDownTimer = object : CountDownTimer(timeCountInMilliSeconds, 1000) {override fun onTick(millisUntilFinished: Long) {textViewTime.text = hmsTimeFormatter(millisUntilFinished).toString()progressBar.progress = (millisUntilFinished / 1000).toInt()seek_main.progress = (millisUntilFinished / 1000).toInt()}override fun onFinish() {textViewTime.text = hmsTimeFormatter(timeCountInMilliSeconds).toString();setProgressBarValues();imageViewReset.isVisible = falseimageViewStartStop.setImageResource(R.drawable.icon_start);editTextMinute.isEnabled = truetimerStatus = TimerStatus.STOPPED;}}countDownTimer.start()}private fun setProgressBarValues() {progressBar.max = (timeCountInMilliSeconds / 1000).toInt()progressBar.progress = (timeCountInMilliSeconds / 1000).toInt()seek_main.max = (timeCountInMilliSeconds / 1000).toInt()seek_main.progress = (timeCountInMilliSeconds / 1000).toInt()}private fun stopCountDownTimer() {countDownTimer.cancel()}private fun hmsTimeFormatter(milliSeconds: Long): Any {val hms = String.format("%02d:%02d:%02d",TimeUnit.MILLISECONDS.toHours(milliSeconds),TimeUnit.MILLISECONDS.toMinutes(milliSeconds) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliSeconds)),TimeUnit.MILLISECONDS.toSeconds(milliSeconds) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliSeconds)))return hms}
}

3.布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorBackground"><com.example.myapplication24.MySeekBarandroid:id="@+id/seek_main"android:layout_width="match_parent"android:layout_height="80dp" /><ProgressBarandroid:id="@+id/progressBar"style="?android:attr/progressBarStyleHorizontal"android:layout_width="270dp"android:layout_height="270dp"android:layout_centerInParent="true"android:background="@drawable/drawable_circle_dark_blue"android:indeterminate="false"android:max="100"android:progress="100"android:progressDrawable="@drawable/drawable_circle_yellow"android:rotation="-90" /><EditTextandroid:id="@+id/editTextMinute"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/textViewTime"android:layout_centerHorizontal="true"android:layout_marginBottom="10dp"android:gravity="center"android:hint="@string/hint_minute"android:inputType="number"android:maxLength="15"android:maxLines="1"android:minEms="5"android:text="1"android:textColor="@color/colorYellow"android:textColorHint="@color/colorYellow" /><TextViewandroid:id="@+id/textViewTime"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="00:01:00"android:textColor="@color/colorYellow"android:textSize="40sp" /><ImageViewandroid:id="@+id/imageViewReset"android:layout_width="30dp"android:layout_height="30dp"android:layout_below="@+id/textViewTime"android:layout_centerInParent="true"android:layout_marginTop="30dp"android:src="@drawable/icon_reset"android:visibility="gone" /><ImageViewandroid:id="@+id/imageViewStartStop"android:layout_width="50dp"android:layout_height="50dp"android:layout_below="@+id/progressBar"android:layout_centerHorizontal="true"android:layout_marginTop="20dp"android:src="@drawable/icon_start" /></RelativeLayout>

4.自定义seebar

package com.example.myapplication24import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.text.TextPaint
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatSeekBarclass MySeekBar : AppCompatSeekBar {// 画笔private var mPaint: Paint? = null// 进度文字位置信息private val mProgressTextRect: Rect = Rect()constructor(context: Context?) : super(context!!)constructor(context: Context?, attrs: AttributeSet?) : super(context!!, attrs)constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context!!,attrs,defStyleAttr)init {mPaint = TextPaint()mPaint!!.isAntiAlias = truemPaint!!.color = Color.parseColor("#00574B")mPaint!!.textSize = this.thumb.intrinsicHeight.toFloat()// 如果不设置padding,当滑动到最左边或最右边时,滑块会显示不全/*  setPadding(this.thumb.intrinsicWidth / 2, 0, this.thumb.intrinsicWidth / 2, 0)*/}@Synchronizedprotected override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val progressText: String = progress.toString()mPaint!!.getTextBounds(progressText, 0, progressText.length, mProgressTextRect)// 进度百分比val progressRatio: Float = progress.toFloat() / max.toFloat()var thumbX =(width - paddingEnd - paddingStart) * progressRatio + paddingStart - this.thumb.intrinsicWidth / 2.0fif (progressRatio > 0.8f) {thumbX -= this.thumb.intrinsicHeight / 2.0f}val thumbY: Float = height / 2f - mProgressTextRect.height() / 2fcanvas.drawText(progressText, thumbX, thumbY, mPaint!!)}}

end

Kotlin定时器CountDownTimer相关推荐

  1. Android kotlin定时器用法及说明

    kotlin定时器 java.util.Timer 定时器 schedule(TimerTask task, long delay) 延迟delay毫秒后,执行一次task schedule(Time ...

  2. Android倒计时定时器CountDownTimer的用法

    前一篇讲了关于Timer定时器的用法,详细请看 Android关于定时器Timer的定义及用法 这一篇简单介绍一下关于倒计时定时器的用法,这涉及到一个CountDownTimer类,写了一个简单的案例 ...

  3. Android Studio倒计时定时器CountDownTimer实现

    //第一个参数为倒计时总时间10000毫秒,第二个参数为每阁500毫秒执行一次,执行次数为10000/500CountDownTimer cdt = new CountDownTimer(10000, ...

  4. swift - 添加定时器

    mport UIKit/// 控制定时器的类 class ZDTimerTool: NSObject {/// 定时器 // private var timer: Timer?/// GCD定时器pr ...

  5. 创建Android定时器的5种方法

    1. 使用Handler对象的postDelayed 方法: Handler TimerHandler=new Handler(); //创建一个Handler对象Runnable myTimerRu ...

  6. Android——常用定时器

    文章目录 Timer和TimerTask 自带定时器 CountDownTimer 使用普通子线程延时 使用Hanlder的postDelayed方法 使用系统的AlarmManager来实现定时任务 ...

  7. android 定时器倒计时,Android CountDownTimer实现定时器和倒计时效果

    本文实例为大家分享了Android实现定时器和倒计时的具体代码,供大家参考,具体内容如下 直接上代码,相信都看得懂. Android已经帮封装好了一个类,只不过很多人不知道而已. 代码: public ...

  8. CountDownTimer 倒计时,定时器工具类

    CountDownTimer 倒计时,定时器工具类 可以用于各种倒计时控件,或者超时机制,使用十分方便. public class CountDownTimerUtils {/*** 倒计时结束的回调 ...

  9. android countdowntimer 格式化,Android中使用CountDownTimer封装CountDownUtil,制作一个简易定时器...

    // CountDownUtil import android.os.CountDownTimer; public class CountDownUtil { /** * 倒计时结束的回调接口 */ ...

最新文章

  1. xming Linux图形界面至Windows
  2. @angular/compiler-cli@4.3.6 requires typescript@'=2.1.0 2.4.0' but 2.5.2 was found instead.
  3. 017_CSS长度单位
  4. 萤火虫算法_智能优化算法萤火虫算法
  5. java count 在哪一类里_java 5线程中 Semaphore信号灯,CyclicBarrier类,CountDownLatch计数器以及Exchanger类使用...
  6. td 首行缩进_工作中常用的CSS整理
  7. linux 打开上一级目录,linux开机启动过程、PATH、过滤一级目录、cd的参数、ls -lrt、命令切割日志...
  8. sql server 触发器应用 insert
  9. 浏览器兼容:改写window.showModalDialog
  10. Linux---文件、软链接于硬链接文件
  11. Android:一个简单的秒表实现
  12. Atitit.http httpclient实践java c# .net php attilax总结
  13. 改变图像的对比度和亮度
  14. 容器技术Docker K8s 9 容器服务ACK应用场景
  15. CCNA认证考试介绍
  16. 基础知识:计算机网络--《趣谈网络协议》读书笔记
  17. 在VMware下新建虚拟机Win10系统
  18. 移动硬盘内容变成快捷方式处理
  19. 显示器偏色测试软件,显示器显示偏色
  20. 【ORACLE】ORA-01653: unable to extend table XXXX by 128 in tablespace XXX

热门文章

  1. matlab函数im2bw_MATLAB中imfill()函数
  2. JavaScript 中 Object.assign() 的用法
  3. 操作系统学习笔记 操作系统概述
  4. 你知道漫画脸怎么生成的吗
  5. 民事诉讼重点简答题及记忆口诀
  6. 项目计划是实现项目目标的必要手段
  7. 「IRC / freenode」- 昵称注册(学习笔记) @20210216
  8. 使用 F12 开发人员工具
  9. 沁恒CH582M开发板-4-OLED显示
  10. checkstyle 使用