验证码倒计时帮助类CountDownButtonHelper的实现

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992

我们在做有关短信验证码功能的时候,为了防止用户无休止的获取短信验证码,或者是误操作,造成验证码混乱的情况,我们一般在获取验证码功能的Button上面加上倒计时功能,从而限制用户获取验证码的间隔。

今天这篇文章,是介绍如何使用CountDowmTimer实现验证码的倒计时功能的。

先看效果图

CountDownTimer是一个系统提供的一个关于倒计数的类,我们可以设置倒计时的总时间,还有倒计时的间隔,这样每过一段固定时间,我们就可以在回调函数中进行我们的操作。下面是CountDownTimer类的回调方法和构造函数。

CountDownTimer timer = new CountDownTimer(AllTime,Intevel) {  

       @Override
       public void onTick(long millisUntilFinished) {  

       }  

       @Override
       public void onFinish() {  

       }
    };

new CountDownTimer(AllTime,Intevel)

第一个参数是总时间,第二个是倒计时间隔。

onTick()是倒计时到了间隔时间之后的回调函数。

onFinish()是计时结束之后调用的函数。

下面,给出我的倒计时帮助类。

package com.example.countdowntimerdemo;

import android.os.CountDownTimer;
import android.util.Log;
import android.widget.Button;

/**
 * 倒计时Button帮助类
 *
 * @author zhaokaiqiang
 * @see http://blog.csdn.net/zhaokaiqiang1992
 */
public class CountDownButtonHelper {

	// 倒计时timer
	private CountDownTimer countDownTimer;
	// 计时结束的回调接口
	private OnFinishListener listener;

	private Button button;

	/**
	 *
	 * @param button
	 *            需要显示倒计时的Button
	 * @param defaultString
	 *            默认显示的字符串
	 * @param max
	 *            需要进行倒计时的最大值,单位是秒
	 * @param interval
	 *            倒计时的间隔,单位是秒
	 */
	public CountDownButtonHelper(final Button button,
			final String defaultString, int max, int interval) {

		this.button = button;
		// 由于CountDownTimer并不是准确计时,在onTick方法调用的时候,time会有1-10ms左右的误差,这会导致最后一秒不会调用onTick()
		// 因此,设置间隔的时候,默认减去了10ms,从而减去误差。
		// 经过以上的微调,最后一秒的显示时间会由于10ms延迟的积累,导致显示时间比1s长max*10ms的时间,其他时间的显示正常,总时间正常
		countDownTimer = new CountDownTimer(max * 1000, interval * 1000 - 10) {

			@Override
			public void onTick(long time) {
				// 第一次调用会有1-10ms的误差,因此需要+15ms,防止第一个数不显示,第二个数显示2s
				button.setText(defaultString + "(" + ((time + 15) / 1000)
						+ "秒)");
				Log.d("CountDownButtonHelper", "time = " + (time) + " text = "
						+ ((time + 15) / 1000));
			}

			@Override
			public void onFinish() {
				button.setEnabled(true);
				button.setText(defaultString);
				if (listener != null) {
					listener.finish();
				}
			}
		};
	}

	/**
	 * 开始倒计时
	 */
	public void start() {
		button.setEnabled(false);
		countDownTimer.start();
	}

	/**
	 * 设置倒计时结束的监听器
	 *
	 * @param listener
	 */
	public void setOnFinishListener(OnFinishListener listener) {
		this.listener = listener;
	}

	/**
	 * 计时结束的回调接口
	 *
	 * @author zhaokaiqiang
	 *
	 */
	public interface OnFinishListener {
		public void finish();
	}

}

测试源代码下载地址,请关注我的github

https://github.com/ZhaoKaiQiang/CountDownTimerDemo

时间: 2024-12-12 17:02:49

验证码倒计时帮助类CountDownButtonHelper的实现的相关文章

Andorid实现点击获取验证码倒计时效果

这篇文章主要介绍了Andorid实现点击获取验证码倒计时效果,这种效果大家经常遇到,想知道如何实现的,请阅读本文 我们在开发中经常用到倒计时的功能,比如发送验证码后,倒计时60s再进行验证码的获取,为了方便以后使用,这里做个记录,讲讲倒计时器的实现. 1.先进行倒计时工具类的封装 1 public class CountDownTimerUtils extends CountDownTimer { 2 private TextView mTextView; 3 4 /** 5 * @param

安卓验证码倒计时实现

安卓为验证码倒计时提供了一个很方便的类android.os.CountDownTimer 其使用方法: new CountDownTimer(30000, 1000) { public void onTick(long millisUntilFinished) { mTextField.setText("seconds remaining: " + millisUntilFinished / 1000); } public void onFinish() { mTextField.se

Android获取短信验证码倒计时

目前越来越多的app在注册或是进行对应操作时,要求获取短信验证码,在点击了获取短信验证码的按钮后,就是出现倒计时,比如倒计时120S,在倒计时期间内,按钮点击是无效的,当倒计时结束后,如果你没有获取到验证码,可以再次点击.实现倒计时的方法很多,我们今天就通过继承android.os.CountDownTimer类来实现! 首先看下我们封装的倒计时工具类,主要为了在多个地方用到的话,用了多个构造方法,就是为了使用更灵活,只要传入对数就可以调用了: public class MyCountTimer

Android--CountDownTimer倒计时工具类

以前使用倒计时都是自己写的,通过handler实现,才发现android os 已经实现了这个工具类.简单使用如下. 1 import android.app.Activity; 2 import android.os.Bundle; 3 import android.os.CountDownTimer; 4 5 public class CountDownTimerActivity extends Activity { 6 private Button mBtn_getcode;// 用户可点

js 发送验证码倒计时

<input  type="text"   name=''  id="btn"> //发送验证码倒计时var wait=30; function time(o) { if (wait == 0) { o.removeAttribute("disabled"); o.value="免费获取验证码"; wait = 30; }else{ o.setAttribute("disabled", true

Android开发:验证码倒计时功能实现

前言 现在好多个APP里面都有验证码倒计时按钮,实现方式大概有下面几种: 1.使用线程和Handler的方式,定时刷新倒计时数字,这种方式容易导致内存泄露,所以一般都使用弱引用,控制数字的刷新. 2.自定义倒计时按钮 3.使用Android提供的CountDownTimer结合TextView实现倒计时功能 这篇主要就是说下用第三种方式实现,简单好用 效果图 实现 以下是核心代码: /** * Created by hfs on 2017/5/9. */ public class TimeCou

react native中的聊天气泡以及timer封装成的发送验证码倒计时

今天看来情书写的文章,研究了一下大佬写的文章,自己做一点总结. 其实,今天我想把我近期遇到的坑都总结一下:1.goBack的跨页面跳转,又两种方法,一可以像兔哥那样修改navigation源码,二可以用navigationActions     2.父子组件的传值,一可以用callBack  二可以用pubsub发布订阅模式 三可以用manager事件监听(a页面要显示的内容 有两种形式,一是从manager主动接收,也就是说不需要点击什么的获取数据,而是时时监听manager里数据的变化,第二

js验证码倒计时

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>验证码的倒计时</title> <style type="text/css"> *{ margin: 0; padding: 0} #btn{ background: #fff; border-radius: 20%; tex

60秒验证码倒计时js代码 js样式代码 方块上下左右随机移动(定时器) js中获取元素的方法 js中表单提交

60秒验证码倒计时js代码 <script type="text/javascript"> var countdown=60; function settime(val) { if (countdown == 0) { //removeAttribute() 方法删除指定的属性. disabled属性规定应该禁用 input 元素. val.removeAttribute("disabled"); val.value="免费获取验证码"