1 直接上图

2 原理

原理非常easy,就是把对应的倒计时逻辑等封装到一个控件中,并向外部提供接口。

3 代码

import java.util.Timer;
import java.util.TimerTask; import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout; /**
* 自己定义控件。实现倒计时功能。
*
* @author Admin
*
*/
public class DaoJiShi extends FrameLayout { private static final int jishi = 0x000;
private SmartButton9 daojishi;
private Handler handler;
private Timer timer;
private int allTime = 50;
private DaoJiShiCallBack daojishicallback; public DaoJiShi(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.daojishi, this);
initView();
initHandler();
initListerner();
} public DaoJiShi(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.daojishi, this);
initView();
initHandler();
initListerner();
} public DaoJiShi(Context context) {
super(context);
// TODO Auto-generated constructor stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.daojishi, this);
initView();
initHandler();
initListerner();
} public void initView() {
daojishi = (SmartButton9) findViewById(R.id.daojishi_btn);
} public void initListerner() {
daojishi.setMyOnClick(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (daojishicallback != null) {
if (daojishicallback.Start()) {
// 手机号验证通过了,那么继续以下的操作。
} else {
// 手机号验证未通过,直接返回了,不运行以下的操作。 return;
}
} else {
// 回调接口为空。有问题。直接返回了,不运行以下的操作。
return;
}
daojishi.setClickable(false);
// button按下时创建一个Timer定时器
timer = new Timer();
// 创建一个TimerTask
// TimerTask是个抽象类,实现了Runnable接口,所以TimerTask就是一个子线程
TimerTask timerTask = new TimerTask() {
// 倒数allTime秒,默认50秒。
int i = allTime; @Override
public void run() {
// Log.d("debug", "run方法所在的线程:"
// + Thread.currentThread().getName());
// 定义一个消息传过去
Message msg = new Message();
msg.what = i--;
handler.sendMessage(msg);
if (i < 0) {
cancel();
}
}
};
// 定义计划任务,依据參数的不同能够完毕以下种类的工作:
// 1.schedule(TimerTask task, Date when) ー> 在固定时间运行某任务
// 2.schedule(TimerTask task, Date when, long
// period) ー> 在固定时间開始反复运行某任务,反复时间间隔可控
// 3.schedule(TimerTask task, long delay) ー> 在延迟多久后运行某任务
// 4.schedule(TimerTask task, long delay, long
// period) ー> 在延迟多久后反复运行某任务,反复时间间隔可控
timer.schedule(timerTask, 1, 1000);// 3秒后開始倒计时,倒计时间隔为1秒
}
});
} public void initHandler() {
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
daojishi.setText(msg.what + "秒后\n又一次获取");
if (daojishicallback != null) {
daojishicallback.numChanged(msg.what);
}
if (msg.what == 0) {
daojishi.setText("获取验证码");
daojishi.setClickable(true);
if (daojishicallback != null) {
daojishicallback.End();
}
}
}
};
} public void stop() {
timer.cancel();
daojishi.setText("获取验证码");
daojishi.setClickable(true);
} public void start() {
daojishi.performClick();
} public void setDaojishicallback(DaoJiShiCallBack daojishicallback) {
this.daojishicallback = daojishicallback;
} public void setAllTime(int allTime) {
this.allTime = allTime;
} /**
* 倒计时控件回调外部代码的接口。
*
* @author Admin
*
*/
public interface DaoJiShiCallBack { /**
* 点击button后,開始计时前调用的方法。
*
* @return 返回true会開始计时。false会退出计时。
*/
public boolean Start(); /**
* 结束啦。 */
public void End(); /**
* 数字发生变化了。
*
* @param num
* @return
*/
public void numChanged(int num); } }

4 project下载

http://download.csdn.net/detail/zhounanzhaode/8986391

Android发送验证码的倒计时button的更多相关文章

  1. Android 发送验证码 简易代码

    效果 Activity ;//倒计时 private Timer timer; private Handler handler = new Handler() { public void handle ...

  2. 【积累】发送验证码按钮倒计时js

    注册的时候要发送验证码,就上网研究了一下,写了一个简单点的... jsp页面: <input type="button" id="testbtn" val ...

  3. 发送验证码60s倒计时实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. js发送验证码(倒计时)

    需求:在用户点击获取验证码后60s内不能再次获取 代码 //倒计时60秒 var countdown=60; //显示获取验证码倒计时的文本标签 var _generate_code =$(" ...

  5. jQuery实现发送验证码30s倒计时,且刷新页面时有效

    在这里讲一讲这个案例的实现思路吧(个人见解)..核心思想:为防止页面刷新时倒计时失效的解决方案是:当每次刷新一次页面时都执行一个函数 即下面讲到的 setStyle() 函数.这个函数会根据当前的 c ...

  6. jQuery实现的手机发送验证码倒计时效果代码分享

    这是一款基于jquery实现的手机发送验证码倒计时效果代码,可实现实时显示秒数倒计时的功能,还可实现对手机号码格式验证的功能,是一款常用的网站注册发送手机验证码特效代码. 效果描述:注册一个网站,当需 ...

  7. js&jq 发送验证码倒计时

    <input  type="text"   name=''  id="btn"> //发送验证码倒计时var wait=30; function t ...

  8. Android倒计时Button

    最近做用户绑定,需要用到倒计时的一个Button,就花点时间封装了一个,非常简单,效果图如下: 1.TimeButton 自定义倒计时Button package com.example.timebu ...

  9. jQuery实现发送验证码倒计时60秒

    前端HMTL: <div class="form_box"> <div class="line mb40"> <div class ...

随机推荐

  1. 学习总结——JMeter做http接口压力测试

    JMeter做http接口压力测试 测前准备 用JMeter做接口的压测非常方便,在压测之前我们需要考虑这几个方面: 场景设定 场景分单场景和混合场景.针对一个接口做压力测试就是单场景,针对一个流程做 ...

  2. git的使用学习(八)自定义git

    在安装Git一节中,我们已经配置了user.name和user.email,实际上,Git还有很多可配置项. 比如,让Git显示颜色,会让命令输出看起来更醒目: $ git config --glob ...

  3. 过滤器解决hibernate中懒加载问题

    使用过滤器解决懒加载问题需要我们对过滤器的生命周期有深刻的理解 1.浏览器发送一个请求 2.请求通过过滤器执行dofilter之前的代码 3.浏览器通过过滤器到达Servlet(注意我们这里的serv ...

  4. js 值类型和引用类型

    function chainStore() { var store1='Nike China'; var store2=store1; store1='Nike U.S.A.'; alert(stor ...

  5. ORACLE SQL*PLUS环境变量设置及说明

    1:查看当前用户的环境设置: SQL> define DEFINE _DATE " (CHAR) DEFINE _CONNECT_IDENTIFIER = "updb&quo ...

  6. iOS -- iOS11新特性,如何适配iOS11

    前言 这几天抽空把WWDC的Session看了一些,总结了一些iOS11新的特性,可能对我们的App有影响,需要我们进行适配.本文作为一个总结. 本文内容包括:集成了搜索的大标题栏.横向选项卡栏.Ma ...

  7. 队列容易queue

    /*先进先出*/#include<iostream>#include<queue> //使用队列必须包含头文件using namespace std;int main(){ q ...

  8. Android 使用SharedPreferences数据存储

    自己写了个SP辅助类 尽管写的有点啰嗦,也是自己的成果.例如以下: package com.yqy.yqy_testsputil; import android.annotation.Suppress ...

  9. Qt编程简介与基本知识

    1. 什么是Qt? Qt是一个基于C++的跨平台应用程序和UI开发框架.它包含一个类库,和用于跨平台开发及国际化的工具. 由挪威Trolltech公司开发,后被Nokia收购,目前被Digia公司收购 ...

  10. mootools客户端框架

    mootools客户端框架 学习:http://www.chinamootools.com/ 官网:https://mootools.net/ 下载地址: https://github.com/moo ...