溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在Android中利用控件實(shí)現(xiàn)一個(gè)驗(yàn)證碼倒計(jì)時(shí)功能

發(fā)布時(shí)間:2020-11-27 16:26:16 來(lái)源:億速云 閱讀:143 作者:Leah 欄目:移動(dòng)開(kāi)發(fā)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)怎么在Android中利用控件實(shí)現(xiàn)一個(gè)驗(yàn)證碼倒計(jì)時(shí)功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

使用方式

<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="獲取驗(yàn)證碼"
 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, "驗(yàn)證碼發(fā)送成功", Toast.LENGTH_SHORT).show();
  }
 });
}

以上幾行代碼即可實(shí)現(xiàn)倒計(jì)時(shí)的功能,這里面我們可以設(shè)置背景色以及倒計(jì)時(shí)的總時(shí)長(zhǎng)。

 實(shí)現(xiàn)方法

/**
 * Created by landptf on 2017/03/15.
 * 獲取驗(yàn)證碼倒計(jì)時(shí)控件
 */
public class CountDownM extends ButtonM {

 private OnClickListener onClickListener = null;
 private CountDownTimer countDownTimer;
 /**
  * 倒計(jì)時(shí)總時(shí)長(zhǎng)
  */
 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) {
   //設(shè)置背景色
   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));
   }
   //獲取倒計(jì)時(shí)總時(shí)長(zhǎng)
   int countDownSeconds = a.getInteger(R.styleable.countDownM_countDownSeconds, 60);
   setCountDownSeconds(countDownSeconds);
   a.recycle();
  }
  //設(shè)置文字顏色
  setTextColor(getResources().getColor(android.R.color.white));
  //設(shè)置位置相關(guān)屬性
  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);
    }
    //點(diǎn)擊后開(kāi)始計(jì)時(shí)
    start();
   }
  });
 }

 /**
  * 設(shè)置倒計(jì)時(shí)總時(shí)長(zhǎng)
  * @param countDownSeconds
  */
 public void setCountDownSeconds(int countDownSeconds){
  this.countDownSeconds = countDownSeconds;
 }

 /**
  * 設(shè)置背景色
  * @param backColor
  */
 @Override
 public void setBackColor(int backColor) {
  this.backColor = backColor;
  super.setBackColor(backColor);
 }

 /**
  * 停止倒計(jì)時(shí)
  */
 public void stop(){
  countDownTimer.cancel();
  resetButton();
 }

 public void setOnClickListener(OnClickListener l){
  this.onClickListener = l;
 }

 private void start(){
  setEnabled(false);//設(shè)置不能點(diǎn)擊
  countDownTimer = new CountDownTimer(countDownSeconds * 1000, 1000) {
   @Override
   public void onTick(long millisUntilFinished) {
    setText(millisUntilFinished / 1000 + getResources().getString(R.string.count_down_m_recapture_after));//設(shè)置倒計(jì)時(shí)時(shí)間
    //設(shè)置按鈕為灰色,這時(shí)是不能點(diǎn)擊的
    CountDownM.super.setBackColor(Color.GRAY);
    Spannable span = new SpannableString(getText().toString());//獲取按鈕的文字
    span.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//講倒計(jì)時(shí)時(shí)間顯示為紅色
    setText(span);
   }

   @Override
   public void onFinish() {
    resetButton();
   }
  };
  countDownTimer.start();
 }

 private void resetButton(){
  setText(getResources().getString(R.string.count_down_m_recapture));
  setEnabled(true);//重新獲得點(diǎn)擊
  if (backColor != 0) {
   setBackColor(backColor);//還原背景色
  } else {
   setBackColor(getResources().getColor(R.color.mainColor));//還原背景色
  }
 }
}

上述就是小編為大家分享的怎么在Android中利用控件實(shí)現(xiàn)一個(gè)驗(yàn)證碼倒計(jì)時(shí)功能了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI