最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義控件實現(xiàn)驗證碼倒計時

 更新時間:2017年03月16日 09:03:58   作者:landptf  
這篇文章主要為大家詳細介紹了Android自定義控件實現(xiàn)驗證碼倒計時的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

今天給大家?guī)硪粋€新的控件——驗證碼倒計時,先看下效果圖

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

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

3 實現(xiàn)方法

/**
 * 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) {
   //設(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));
   }
   //獲取倒計時總時長
   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);
    }
    //點擊后開始計時
    start();
   }
  });
 }

 /**
  * 設(shè)置倒計時總時長
  * @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);
 }

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

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

 private void start(){
  setEnabled(false);//設(shè)置不能點擊
  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è)置倒計時時間
    //設(shè)置按鈕為灰色,這時是不能點擊的
    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七十二變

全部代碼已托管到開源中國的碼云上,歡迎下載,地址:https://git.oschina.net/landptf/landptf.git

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android事件總線EventBus3.0使用方法詳解

    android事件總線EventBus3.0使用方法詳解

    這篇文章主要為大家詳細介紹了android事件總線EventBus3.0使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android?Jetpack庫剖析之ViewModel組件篇

    Android?Jetpack庫剖析之ViewModel組件篇

    這篇文章主要介紹了Android?Jetpack架構(gòu)組件?ViewModel詳解,ViewModel類讓數(shù)據(jù)可在發(fā)生屏幕旋轉(zhuǎn)等配置更改后繼續(xù)存在,ViewModel類旨在以注重生命周期的方式存儲和管理界面相關(guān)的數(shù)據(jù)。感興趣可以來學(xué)習(xí)一下
    2022-07-07
  • Android之使用Android-query框架開發(fā)實戰(zhàn)(一)

    Android之使用Android-query框架開發(fā)實戰(zhàn)(一)

    這篇文章主要介紹了Android之使用Android-query框架開發(fā)實戰(zhàn)(一)的相關(guān)資料,需要的朋友可以參考下
    2015-10-10
  • Android自動播放Banner圖片輪播效果

    Android自動播放Banner圖片輪播效果

    這篇文章主要介紹了Android自動播放Banner圖片輪播效果的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android實現(xiàn)Unity3D下RTMP推送的示例

    Android實現(xiàn)Unity3D下RTMP推送的示例

    像Unity3D下的RTMP或RTSP播放器一樣,好多開發(fā)者苦于在Unity環(huán)境下,如何高效率低延遲的把數(shù)據(jù)采集并編碼實時推送到流媒體服務(wù)器,實現(xiàn)Unity場景下的低延遲推拉流方案。本文介紹幾種RTMP推送的方案
    2021-06-06
  • Android sqlite設(shè)置主鍵自增長的方法教程

    Android sqlite設(shè)置主鍵自增長的方法教程

    這篇文章主要給大家介紹了關(guān)于Android sqlite設(shè)置主鍵自增長的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • Android 實現(xiàn)帶字母索引的側(cè)邊欄功能

    Android 實現(xiàn)帶字母索引的側(cè)邊欄功能

    這篇文章主要介紹了Android 實現(xiàn)帶字母索引的側(cè)邊欄功能,需要的朋友可以參考下
    2017-08-08
  • Android編程實現(xiàn)識別與掛載U盤的方法

    Android編程實現(xiàn)識別與掛載U盤的方法

    這篇文章主要介紹了Android編程實現(xiàn)識別與掛載U盤的方法,對比分析了Android針對U盤的識別與掛載技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-02-02
  • Android中應(yīng)用前后臺切換監(jiān)聽的實現(xiàn)詳解

    Android中應(yīng)用前后臺切換監(jiān)聽的實現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于Android中應(yīng)用前后臺切換監(jiān)聽實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • Android  xml解析實例詳解

    Android xml解析實例詳解

    這篇文章主要介紹了Android xml解析實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評論

阿瓦提县| 吉林省| 萨迦县| 云安县| 光泽县| 忻州市| 凤庆县| 同江市| 永顺县| 富平县| 上犹县| 桑日县| 乌拉特前旗| 连南| 耒阳市| 耿马| 新干县| 仙游县| 恩平市| 高台县| 泗洪县| 新安县| 平南县| 合水县| 博客| 天祝| 玉树县| 陵川县| 内丘县| 临夏市| 廉江市| 象山县| 东城区| 明星| 辉南县| 新巴尔虎左旗| 安龙县| 湖南省| 来安县| 旌德县| 孟村|