仿照某些APP,设计在Splash页面右上角上添加圆形倒计时器,实现:

1、圈内时间倒计时

2、圆环动态增长

实现方式:

1、CircleTextView:
继承自TextView类,接收从外部提供的当前进度百分比,通过重绘canvas的方式模拟圆环自动增长的效果。
具体实现如下:
声明自定义属性:
<span style="white-space:pre">   </span>TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CircleTextView);width = ta.getDimension(R.styleable.CircleTextView_width, 1);                      //圆环宽度stroke = ta.getColor(R.styleable.CircleTextView_stroke, Color.RED);                //圆环颜色background = ta.getColor(R.styleable.CircleTextView_back, Color.TRANSPARENT);      //canvas背景million_time = ta.getFloat(R.styleable.CircleTextView_million_time, 3000);         //倒计时时间per_million_time = ta.getFloat(R.styleable.CircleTextView_per_million_time, 100);  //倒计时间隔seq = ta.getInt(R.styleable.CircleTextView_seq, 1);                                //顺序(positive:正序,negative:倒序)ta.recycle();
绘制canvas:
    @Overrideprotected void onDraw(Canvas canvas) {//绘制背景paint.setColor(background);paint.setStyle(Paint.Style.FILL);canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, canvas.getWidth() / 2, paint);//绘制初始外框paint.setColor(Color.LTGRAY);canvas.drawColor(Color.TRANSPARENT);paint.setStrokeWidth(width);paint.setStyle(Paint.Style.STROKE);//绘制进度条canvas.drawArc(rectF, -90, 360, false, paint);paint.setColor(stroke);canvas.drawArc(rectF, -90, per * 360, false, paint);super.onDraw(canvas);}
更新canvas:
    private void drawProgress(float p) {this.per = p;this.postInvalidate();}
这样一个简单的自定义TextView控件就做好了。
下面,需要给这个控件添加倒计时功能,需要用到CountDownTimer类,声明一个内部私有类MyCountDownTimer:
private class MyCountDownTimer extends CountDownTimer {/*** @param millisInFuture    The number of millis in the future from the call*                          to {@link #start()} until the countdown is done and {@link #onFinish()}*                          is called.* @param countDownInterval The interval along the way to receive*                          {@link #onTick(long)} callbacks.*/public MyCountDownTimer(long millisInFuture, long countDownInterval) {super(millisInFuture, countDownInterval);}@Overridepublic void onTick(long millisUntilFinished) {drawProgress(1 - millisUntilFinished / million_time);if(seq == 0)ct.setText((int) (million_time - millisUntilFinished) / 1000 + "s");elsect.setText(((int) (millisUntilFinished) / 1000 + 1) + "s");}@Overridepublic void onFinish() {ct.drawProgress(1);if(seq == 0) {ct.setText((int) (million_time / 1000) + "s");} else {ct.setText("0s");}}

添加倒计时完成的监听功能:

<span style="white-space:pre">    </span>public interface ResultListener {<span style="white-space:pre">       </span>public void onBegin();<span style="white-space:pre">      </span>public void onFinish();
<span style="white-space:pre"> </span>}

同时,在CirCleTextView中,添加此listener,并在控件的start()函数中传递onBegin消息及倒计时类中的onFinish()函数中传递onFinish()消息。

android 圆形倒计时实现相关推荐

  1. android欢迎页圆形倒计时,android 欢迎页圆形进度条倒计时功能

    常见app欢迎页圆形进度条倒计时功能,可设置显示文字,进度条颜色,宽度,倒计时时间,内圆颜色.设置进度条类型  顺数进度条(0-100)还是倒数进度条(100-0): 先上效果图: 下面介绍实现逻辑: ...

  2. android闹钟倒计时_如何在Android上使用闹钟,计时器和秒表

    android闹钟倒计时 Your Android device's built-in Clock app can serve as an alarm clock, a kitchen timer, ...

  3. Android 实现倒计时动画效果

    想要实现的效果图如下: 点击"倒计时开始"按钮,会出现从10到0的倒计时动画.说是动画,其实并不是用animation等来制作,而仅仅是用TextView更新文字的方式来实现动画效 ...

  4. android圆形菜单

    实习第三天开发在android圆形菜单 知识参考:http://www.cnblogs.com/zwl12549/archive/2011/04/13/2015366.html和http://www. ...

  5. android倒计时功能,android实现倒计时功能(开始、暂停、0秒结束)

    本文实例为大家分享了android实现倒计时功能的具体代码,供大家参考,具体内容如下 [思路]:通过 timer 执行周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer ...

  6. Android 圆形/圆角图片的方法

    Android 圆形/圆角图片的方法 眼下网上有非常多圆角图片的实例,Github上也有一些成熟的项目.之前做项目,为了稳定高效都是选用Github上的项目直接用.但这样的结束也是Android开发必 ...

  7. 微信小程序中使用圆形倒计时实例

    需求概要 小程序中使用圆形倒计时,效果图: 思路 使用2个canvas 一个是背景圆环,一个是彩色圆环. 使用setInterval 让彩色圆环逐步绘制. 解决方案 第一步先写结构 一个盒子包裹2个c ...

  8. android中倒计时控件CountDownTimer分析

    android中倒计时控件CountDownTimer分析1 示例代码 new CountDownTimer(10000, 1000) {public void onTick(long millisU ...

  9. Android 圆形头像的两种实现方式

    Android 圆形头像的两种实现方式 前言 这篇博客只是为了做一个记录而已,方便而后查询,核心代码都是直接采用鸿洋博客里面的代码的. 圆形头像在实际开发中实际很常见,一般来说,主要有两种实现方式: ...

最新文章

  1. 阿里云ECS使用cloudfs4oss挂载OSS
  2. C语言设备管理器作业,你知道到吗,C语言竟是如何调用硬件的?
  3. JsonPath的使用
  4. 用PHP打印出前一天的时间
  5. 【转载保存】java静态方法继承与保存的问题
  6. matlab图片包微盘,如何用Matlab绘制二维图形资料下载
  7. mysql基础之数据库备份和恢复的基础知识
  8. java计算机毕业设计校园流浪猫图鉴管理系统的设计与实现源码+数据库+系统+lw文档+部署
  9. linux shell有哪些变量,Linux Bash Shell有关变量
  10. 查找100-200以内素数
  11. PHP 文件下载 浅析
  12. MongoDB分片集群部署(三)
  13. 从高盛的技术“开源”看金融业软件发展未来
  14. 不必急于吹响裁判哨:“安卓禁令”后华为手机的变数与新机
  15. UEditor上传漏洞修复
  16. java linux 读取文件内容_java访问Linux服务器读取文件
  17. 360软件管家解除文件关联
  18. 舆情监测意思及监测工作流程详介
  19. 高新技术企业认定八大条件、八大领域、四项指标
  20. java 恶汉和懒汉_Java单例模式-懒汉式、恶汉式与线程安全问题

热门文章

  1. 2341 Problem A 叶鹏学长的棉花糖
  2. XlistView多条目加载简单实现2
  3. Jenkins pipeline 停止
  4. oracle flashback与归档关系,Oracle闪回归档(下) —— Oracle Flashback Archive
  5. max面部骨骼镜像脚本
  6. 从CreateFile(APP)到NtCreateFile(Kernel Mode)
  7. 数据结构基础之动态数组
  8. 2022年大连理工大学计算机考研复试时间与复试范围
  9. 研华工控台式计算机选型,工控机选型指南
  10. python 实现 浏览器页面转图片