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 ...
随机推荐
- [SaltStack] Crontab部署
salt.states.cron 接着早上安静的时间, 在这里梳理下crontab相关的东东, 主要是crontab的统一管理维护, 包括新增, 修改, 下线等等. 下面就详细看下crontab的sl ...
- Hibernate search与Lucene包异常学习心得
最近使用了了一下Hibernate Search这个组件 这个组件是对域模型进行全文检索,在全文检索的底层实现上使用了Lucene技术 在进行小测试的时候费了很大的力气去搞定包的问题 我直接通过实例 ...
- (6)ASP.NET HttpServerUtility 类
HttpServerUtility 类 提供用于处理 Web 请求的 Helper 方法 https://msdn.microsoft.com/zh-cn/library/system.web.htt ...
- Scaling the Messages Application Back End 【转】
11年的blog. Facebook Messages seamlessly integrates many communication channels: email, SMS, Facebook ...
- httperf+autobench测试web应用
测试性能相关的概念理解 httperf使用 主页: http://www.hpl.hp.com/research/linux/httperf/ 下载: http://httperf.googleco ...
- Product of Array Except Self - LeetCode
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...
- AIX 删除指定目录、指定后缀、指定天数以前的历史文件
find /home/oracle/admin/zhjport/udump/ -name "*.trc" -mtime +30 -exec rm {} \; 如果要自动执行可以加入 ...
- AutoCAD如何输入文字
1 运行文字命令(这里使用单行文字),然后鼠标点击文字的起始点,如图所示 2 鼠标分别向上和向右移动一定距离,表示文字的高度(文字的大小)和文字的旋转角度(一般向右,因为是水平文字) 3 最后 ...
- 实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中推断不等于end())、operator[])
遍历一个vector容器有非常多种方法.使用起来也是仁者见仁. 通过索引遍历: for (i = 0; i<v.size(); i++) { cout << v[i] << ...
- zepto jquery和zepto的区别?
jQuery 由于强大的生命力基本上是一个事实标准,所以大部分工具 lib 在 DOM 操作.动画等功能上或多或少都会是 jQuery-like 的. Zepto 的 API 就是完全兼容 jQuer ...