Android自定义控件实现验证码倒计时
程序员文章站
2023-12-05 13:05:40
今天给大家带来一个新的控件——验证码倒计时,先看下效果图
1 效果演示
2 使用方式
今天给大家带来一个新的控件——验证码倒计时,先看下效果图
1 效果演示
2 使用方式
<com.landptf.view.countdownm android:id="@+id/cdm_identifying_code" android:layout_width="wrap_content" android:layout_height="50dp" android:layout_alignparentright="true" android:text="获取验证码" landptf:backcolor="@color/colorprimary" landptf:countdownseconds="10"/> countdownm cdmidentifyingcode = (countdownm) findviewbyid(r.id.cdm_identifying_code); if (cdmidentifyingcode != null) { cdmidentifyingcode.setonclicklistener(new countdownm.onclicklistener() { @override public void onclick(view v) { toast.maketext(countdownmtestactivity.this, "验证码发送成功", toast.length_short).show(); } }); }
以上几行代码即可实现倒计时的功能,这里面我们可以设置背景色以及倒计时的总时长。
3 实现方法
/** * created by landptf on 2017/03/15. * 获取验证码倒计时控件 */ public class countdownm extends buttonm { private onclicklistener onclicklistener = null; private countdowntimer countdowntimer; /** * 倒计时总时长 */ private int countdownseconds = 60; /** * 按钮的背景色 */ private int backcolor = 0; public interface onclicklistener{ void onclick(view v); } public countdownm(context context) { this(context, null); } public countdownm(context context, attributeset attrs) { this(context, attrs, 0); } public countdownm(context context, attributeset attrs, int defstyle) { super(context, attrs, defstyle); typedarray a = context.obtainstyledattributes(attrs, r.styleable.countdownm, defstyle, 0); if (a != null) { //设置背景色 colorstatelist colorlist = a.getcolorstatelist(r.styleable.countdownm_backcolor); if (colorlist != null) { backcolor = colorlist.getcolorforstate(getdrawablestate(), 0); if (backcolor != 0) { setbackcolor(backcolor); } } else { setbackcolor(getresources().getcolor(r.color.maincolor)); } //获取倒计时总时长 int countdownseconds = a.getinteger(r.styleable.countdownm_countdownseconds, 60); setcountdownseconds(countdownseconds); a.recycle(); } //设置文字颜色 settextcolor(getresources().getcolor(android.r.color.white)); //设置位置相关属性 setgravity(gravity.center); setpadding(convertm.dp2px(context, 8), 0, convertm.dp2px(context, 8), 0); setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { if (onclicklistener != null) { onclicklistener.onclick(v); } //点击后开始计时 start(); } }); } /** * 设置倒计时总时长 * @param countdownseconds */ public void setcountdownseconds(int countdownseconds){ this.countdownseconds = countdownseconds; } /** * 设置背景色 * @param backcolor */ @override public void setbackcolor(int backcolor) { this.backcolor = backcolor; super.setbackcolor(backcolor); } /** * 停止倒计时 */ public void stop(){ countdowntimer.cancel(); resetbutton(); } public void setonclicklistener(onclicklistener l){ this.onclicklistener = l; } private void start(){ setenabled(false);//设置不能点击 countdowntimer = new countdowntimer(countdownseconds * 1000, 1000) { @override public void ontick(long millisuntilfinished) { settext(millisuntilfinished / 1000 + getresources().getstring(r.string.count_down_m_recapture_after));//设置倒计时时间 //设置按钮为灰色,这时是不能点击的 countdownm.super.setbackcolor(color.gray); spannable span = new spannablestring(gettext().tostring());//获取按钮的文字 span.setspan(new foregroundcolorspan(color.red), 0, 2, spannable.span_inclusive_exclusive);//讲倒计时时间显示为红色 settext(span); } @override public void onfinish() { resetbutton(); } }; countdowntimer.start(); } private void resetbutton(){ settext(getresources().getstring(r.string.count_down_m_recapture)); setenabled(true);//重新获得点击 if (backcolor != 0) { setbackcolor(backcolor);//还原背景色 } else { setbackcolor(getresources().getcolor(r.color.maincolor));//还原背景色 } } }
代码比较短,这里面继承了buttonm,有不了解的可以看一下我之前的博客
android自定义控件系列(一)—button七十二变
全部代码已托管到开源中国的码云上,欢迎下载,地址:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: mysql zip 文件安装教程