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 ...
随机推荐
- steam linux 使用socks代理
环境:Ubuntu 15.10 64bit,Steam:built:May 10 2016 需要的工具:ssh/shadowsocks等socks5代理,tsocks ---------------- ...
- JavaScript闭包 循环输出i
html <body> <p>产品一</p> <p>产品二</p> <p>产品三</p> <p>产品四& ...
- CAS统一认证系统学习
Yale CAS(耶鲁集中认证服务)简介 http://www.5iops.com/html/2012/sso_0713/181.html 单点登陆框架CAS的研究 http://www.cnblog ...
- Notepad++ 自动补全,括号自动完成插件,主题和字体设置
Notepad++ 自动补全成对符号http://rabbit52.com/2012/devel/notepad-autocomplete-brackets QuickText 和 Zen Codin ...
- 参数化2--CSV Data Set Config 参数化配置
众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. ...
- Maven出现错误No plugin found for prefix 'jetty' in the current project and in the plugin groups的问题解决
只需在maven的setting.xml文件上加入如下节点: <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginG ...
- Delphi 释放数组中的数据
FillChar(aryTest[Low(aryTest)], Length(aryTest) * SizeOf(aryTest[Low(aryTest)]), 0);
- 卸载django
首先找到django安装路径 Python import sys; sys.path = sys.path[1:]; import django; print(django.__path__) 得到 ...
- kali渗透测试基础
一侦查 研究如何收集有关目标的情报,比如开发那些端口用来通信,托管在哪里,提供给客户的服务类型等. 交付内容应该包括需要攻击的所有目标资产清单,与那些资产关联的应用,使用的服务以及可能的资产所有者. ...
- #pragma预处理命令【转】
原文 : http://www.cnblogs.com/qinfengxiaoyue/archive/2012/06/05/2535524.html #pragma可以说是C++中最复杂的预处理指令了 ...