Android自定义控件实现验证码倒计时

Android自定义控件实现验证码倒计时,第1张

概述今天给大家带来一个新的控件――验证码倒计时,先看下效果图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,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),ConvertM.dp2px(context,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),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七十二变

全部代码已托管到开源中国的码云上,欢迎下载,地址:https://git.oschina.net/landptf/landptf.git

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android自定义控件实现验证码倒计时全部内容,希望文章能够帮你解决Android自定义控件实现验证码倒计时所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存