Android发送验证码的倒计时button
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下载
Android发送验证码的倒计时button的更多相关文章
- Android 发送验证码 简易代码
效果 Activity ;//倒计时 private Timer timer; private Handler handler = new Handler() { public void handle ...
- 【积累】发送验证码按钮倒计时js
注册的时候要发送验证码,就上网研究了一下,写了一个简单点的... jsp页面: <input type="button" id="testbtn" val ...
- 发送验证码60s倒计时实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js发送验证码(倒计时)
需求:在用户点击获取验证码后60s内不能再次获取 代码 //倒计时60秒 var countdown=60; //显示获取验证码倒计时的文本标签 var _generate_code =$(" ...
- jQuery实现发送验证码30s倒计时,且刷新页面时有效
在这里讲一讲这个案例的实现思路吧(个人见解)..核心思想:为防止页面刷新时倒计时失效的解决方案是:当每次刷新一次页面时都执行一个函数 即下面讲到的 setStyle() 函数.这个函数会根据当前的 c ...
- jQuery实现的手机发送验证码倒计时效果代码分享
这是一款基于jquery实现的手机发送验证码倒计时效果代码,可实现实时显示秒数倒计时的功能,还可实现对手机号码格式验证的功能,是一款常用的网站注册发送手机验证码特效代码. 效果描述:注册一个网站,当需 ...
- js&jq 发送验证码倒计时
<input type="text" name='' id="btn"> //发送验证码倒计时var wait=30; function t ...
- Android倒计时Button
最近做用户绑定,需要用到倒计时的一个Button,就花点时间封装了一个,非常简单,效果图如下: 1.TimeButton 自定义倒计时Button package com.example.timebu ...
- jQuery实现发送验证码倒计时60秒
前端HMTL: <div class="form_box"> <div class="line mb40"> <div class ...
随机推荐
- Eclipse下搭建Maven框架
内容中包含 base64string 图片造成字符过多,拒绝显示
- JLOI2018 日志
JLOI2018 今年有幸参加吉林省的省选,考过之后在这里写一下总结和感受. DAY1: t1(chess):首先看到题目,第一想法是暴力,上来直接写了暴力,枚举所有的情况,再在这些情况里找到差值最大 ...
- IE6~IE7 bugs
本来想写一篇关于 IE bugs 的总结的,但是发现 IE 的 bugs 一般都存在IE5,IE6,IE7上,这都是很古老的浏览器.而且这些 bugs 测试起来相当麻烦,IEtester和 IE10 ...
- GCJ——Crazy Rows (2009 Round 2 A)
题意: 给定一个N*N的矩阵,由0,1组成,只允许交换相邻的两行,把矩阵转化为下三角矩阵(对角线上方全是0),最少需要多少次交换?(保证可以转化为下三角矩阵) Large: N<=40 解析: ...
- setTimeout改变this指向(****************************************)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Android内存泄露自动检测神器LeakCanary
经典的面试题: a.怎样在coding过程中避免内存泄露? b.怎样检测内存泄露? 这两个问题我想大部分Android 职位面试时都会被问到吧. 怎样避免就不赘述了,网上很多答案. 工具呢,当然也有很 ...
- Ubuntu免安装配置MySQL
1.下载mysql http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz 2.解压 ta ...
- spring batch的使用和定时器Quart的使用
Spring Batch是一个基于Spring的企业级批处理框架,它通过配合定时器Quartz来轻易实现大批量的数据读取或插入,并且全程自动化,无需人员管理. 在使用spring batch之前,得对 ...
- Web终端之使用shellinabox在浏览器进行ssh登录
shellinbox有一个内建的web server作为基本的web ssh client,允许你通过指定的端口访问linux服务器的ssh shell,只要你的浏览器支持AJAX/JS/CSS就可以 ...
- 报错: Access restriction: The type JPEGImageEncoder is not accessible due to restriction on required library
报错: Access restriction:The type JPEGCodec is not accessible due to restriction on required library C ...