自定义的倒计时按钮应该很多人都做过,我想最常见的实现方式应该就是开启一个子线程,然后通过Handler去更新UI实现,

这里我自定义了一个按钮,通过在handler中发送handler的方式,也同样实现了计时器的效果,而且也不需要开子线程,是代码的内存消耗更小更具有操作性

实现效果如下

直接上代码:

package com.fizzer.doraemon.localdemo.Animation.View;import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.widget.Button;
import android.widget.Chronometer;/*** Created by Fizzer on 2016/12/13.* Email: doraemonmqq@sina.com* 倒计时控件*/public class CountDownButton extends Button {private boolean isRunning = false;private int startTime = 10;private int changeTime;private int TASK_RUNNING = 1;public CountDownButton(Context context) {super(context);}public CountDownButton(Context context, AttributeSet attrs) {super(context, attrs);}public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public void start() {isRunning = true;changeTime = startTime;setText(changeTime + "秒");updateRunning();}public void stop() {isRunning = false;updateRunning();}/*** 设置倒计时时间* @param time  time*/public void setStartTime(int time) {this.startTime = time;}private void updateRunning() {if (isRunning) {mHandler.sendMessageDelayed(Message.obtain(mHandler, TASK_RUNNING), 1000);} else {mHandler.removeMessages(TASK_RUNNING);}}Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {changeTime--;setText(changeTime + "秒");setClickable(false);if (changeTime >= 0) {mHandler.sendMessageDelayed(Message.obtain(mHandler, TASK_RUNNING), 1000);} else {changeTime = startTime;mHandler.removeMessages(TASK_RUNNING);setText("重新开始");setClickable(true);}}};/*** 界面关闭的时候,停止发送handler*/@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();isRunning = false;updateRunning();}
}

在使用的类中调用一下start方法就行了

mMyButton.start();

Android自定义控件之自定义倒计时按钮相关推荐

  1. Android自定义控件之自定义时钟

    Android自定义控件之自定义时钟 这个是我从别的开源项目中挖出来的,真心写的很不错,然后继续下来以便不时之需,直接上代码: WatcherBoard.java这个是自定义的时钟类 package ...

  2. android如何让自定义控件居中,Android自定义控件之自定义TextView,实现drawableLeft可以和文字一起居中...

    如何实现使用TextView的DrawableLeft使图片和文字居中显示呢??? 代码如下: 1.首先自定义一个类,继承TextViewpackage com.test.signcalendar.w ...

  3. Android自定义控件——仿微信语音按钮

    对于更多自定义控件的介绍,可以参考这篇:Android自定义view组合控件解析 示例 就是下方那个按钮(可以忽略ios系统)  使用 在xml中直接调用即可: public class VoiceB ...

  4. Android自定义控件——获取验证码倒计时

    目前为止,有很多地方都需要绑定用户手机号,发送短信,比如说找回密码,注册或者登陆,这些控件都是很常用的,不需要每次使用的时候都重新写一个,这样比较麻烦,也浪费时间.本人自定义了一些控件. 废话不多说, ...

  5. android textview 楷体,Android自定义控件之自定义Text,画出米字格-FenGKun

    public class WordText extends TextView { /** 画笔 */ private Paint paint = new Paint(); // 定义画笔 public ...

  6. 玩转android自定义控件二——自定义索引栏listview

    带索引栏的listview,在android开发非常普遍,方便用户进行字母索引,就像微信通讯录这样: 今天,我们就从零到一实现这个具有索引栏的listview. 怎么实现这个控件了,我们应当梳理出一个 ...

  7. android 自定义控件 焦点,Android 自定义Button按钮显示样式(正常、按下、获取焦点)...

    现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天学习自定义Button按钮样式.Button样式修改的是Button的背景 ...

  8. Android自定义控件系列二:自定义开关按钮(一)

    这一次我们将会实现一个完整纯粹的自定义控件,而不是像之前的组合控件一样,拿系统的控件来实现:计划分为三部分:自定义控件的基本部分,自定义控件的触摸事件的处理和自定义控件的自定义属性: 下面就开始第一部 ...

  9. Android自定义控件系列二:自定义开关按钮

    这一次我们将会实现一个完整纯粹的自定义控件,而不是像之前的组合控件一样,拿系统的控件来实现:计划分为三部分:自定义控件的基本部分,自定义控件的触摸事件的处理和自定义控件的自定义属性: 下面就开始第一部 ...

  10. android 自定义时钟,Android自定义控件之圆形时钟(续)

    在上篇文章中,我向大家介绍了如何通过自定义View一步步画出一个漂亮的圆形时钟.如果你还没看的话,我不建议你接着往下看,因为这篇文章是接着上篇的文章,如果直接看的话可能会不知所云,所以还是建议你先看一 ...

最新文章

  1. mysql 软件导出导入数据_MySQL 之 导出导入数据
  2. Centos 7 安装 Haproxy
  3. react页面数据过多怎么办_React-多页面应用
  4. 为啥八位的计算机可以用补码表示-128
  5. Linux命令中的参数,linux中一些命令以及一些参数的用法
  6. 35数据结构与算法分析之---最短路径
  7. 《C++ Primer 第五版》(第4.11-4.12节)——static_cast,const_cast和reinterpret_cast类型转换, 运算符优先级表
  8. P2896 [USACO08FEB]一起吃饭Eating Together 解题报告
  9. Python - Django - 中间件 process_exception
  10. VS2013崩溃,无法打开项目的解决方案
  11. LeetCode 514. 自由之路(记忆化递归 / DP)
  12. java scipt 对象 函数_java script 基本函数
  13. Android事件分发 笔记
  14. 学生成绩管理系统实验报告_学习60天python成果,Python变成学生成绩管理系统
  15. apollo修改配置刷新bean_微服务配置中心完全解读
  16. 编程测试,程序员过不去的坎?
  17. python随机抽奖程序代码_详解用python写一个抽奖程序
  18. clean-css 安装 使用
  19. 2022-2028年中国智能机床行业市场专项调研及投资前景规划报告
  20. 微信快捷回复技巧秘籍

热门文章

  1. 总结篇——从零搭建maven多模块springboot+mybatis项目
  2. 多维数组和矩阵----子数组最大累加和
  3. POJ2352 Stars
  4. HDOJ2027统计元音
  5. linux 用户管理、权限管理
  6. Nginx代理服务器使用
  7. 动态获取数据表或临时表列名
  8. react中对象扩展运算符使用问题
  9. CodeForces - 468A 24 Game
  10. 如何查看mysql数据库的端口