Android 中倒计时验证两种常用方式实例详解
程序员文章站
2022-06-04 21:40:21
android 中倒计时验证两种常用方式实例详解
短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用。看图:
说明:这里的及时从10开始,是为了演示的时间不...
android 中倒计时验证两种常用方式实例详解
短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用。看图:
说明:这里的及时从10开始,是为了演示的时间不要等太长而修改的。
1、第一种方式:timer
/** * description:自定义timer * <p> * created by mjj on 2016/12/4. */ public class timecount extends countdowntimer { private button button; //参数依次为总时长,和计时的时间间隔 public timecount(button button, long millisinfuture, long countdowninterval) { super(millisinfuture, countdowninterval); this.button = button; } //计时过程显示 @override public void ontick(long millisuntilfinished) { string time = "(" + millisuntilfinished / 1000 + ")秒"; setbuttoninfo(time, "#c1c1c1", false); } //计时完毕时触发 @override public void onfinish() { setbuttoninfo("重新获取", "#f95353", true); } /** * 验证按钮在点击前后相关设置 * * @param content 要显示的内容 * @param color 颜色值 * @param isclick 是否可点击 */ private void setbuttoninfo(string content, string color, boolean isclick) { button.settext(content); button.setbackgroundcolor(color.parsecolor(color)); button.setclickable(isclick); } }
说明:根据自己的需求,在这里修改背景颜色和不同状态显示文字即可,在需要监听的按钮下直接调用new timercount(xxx,xxx,xxx).start()即可。
2、第二种方式:handler
/** * 第二种方式:使用handler * <p> * 静态内部类:避免内存泄漏 */ private static class myhandler extends handler { private final weakreference<mainactivity> weakreference; public myhandler(mainactivity activity) { weakreference = new weakreference<mainactivity>(activity); } @override public void handlemessage(message msg) { super.handlemessage(msg); mainactivity activity = weakreference.get(); if (activity != null) { switch (msg.what) { case 0: if (msg.arg1 == 0) { btn2.settext("重新获取"); btn2.setbackgroundcolor(color.parsecolor("#f95353")); btn2.setclickable(true); } else { btn2.settext("(" + msg.arg1 + ")秒"); btn2.setbackgroundcolor(color.parsecolor("#c1c1c1")); btn2.setclickable(false); } break; } } } } /** * 监听按钮下直接调用即可 */ private void sendmessageclick() { new thread(new runnable() { @override public void run() { for (int i = 59; i >= 0; i--) { message msg = myhandler.obtainmessage(); msg.arg1 = i; myhandler.sendmessage(msg); try { thread.sleep(1000); } catch (interruptedexception e) { e.printstacktrace(); } } } }).start(); }
说明:此种方式采用的handler实时接收消息来设置button的状态,对于消息的发送用的是sendmessage方式,也可以使用post方式。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!