博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android发送验证码的倒计时button
阅读量:5772 次
发布时间:2019-06-18

本文共 3854 字,大约阅读时间需要 12 分钟。

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下载

你可能感兴趣的文章
阅读笔记十六
查看>>
数据结构与算法设计--树的镜像
查看>>
最大子数组和
查看>>
软件工程学期总结
查看>>
二、Hadoop集群
查看>>
思科3750交换机堆叠配置指南
查看>>
不错,也想搭建h2weibo而且作者的这个博客也好,能问一下是怎么修改的吗,或者作者也可以写篇博......
查看>>
javaweb大全:地址来自 孤傲苍狼
查看>>
pom.xml 出错版
查看>>
极光推送
查看>>
Hive安装
查看>>
实验四 主存空间的分配和回收
查看>>
股票API
查看>>
linux的打包与解压
查看>>
poj2349
查看>>
Django的模板系统
查看>>
实现AJAX局部刷新以及PageMethod方法的使用
查看>>
RabbitMQ 安装
查看>>
静态构造函数(C# 编程指南)
查看>>
规格化设计-----JSF(第三次博客作业)
查看>>