Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android自定义控件实现验证码倒计时大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

今天给大家带来一个新的控件――验证码倒计时,先看下效果

1 效果演示

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

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();
  }
 });
}

以上几行代码即可实现倒计时的@L_197_5@,这里面我们可以设置背景色以及倒计时的总时长。

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自定义控件实现验证码倒计时所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。