Android自定義控件實現(xià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)倒計時的功能,這里面我們可以設置背景色以及倒計時的總時長。
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) { //設置背景色 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七十二變
全部代碼已托管到開源中國的碼云上,歡迎下載,地址:https://git.oschina.net/landptf/landptf.git
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android socket如何實現(xiàn)文件列表動態(tài)訪問
本文介紹Android socket實現(xiàn)文件列表動態(tài)訪問,訪問文件夾之后通過listview展示,并在點擊文件夾后進入文件夾,獲得其內(nèi)容,有此需求的朋友可以參考下2021-06-06Android 復制文本內(nèi)容到系統(tǒng)剪貼板的最簡單實例(分享)
下面小編就為大家?guī)硪黄狝ndroid 復制文本內(nèi)容到系統(tǒng)剪貼板的最簡單實例(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04ImageView的屬性android:scaleType的作用分析
本篇文章是對ImageView的屬性android:scaleType的作用進行了詳細的分析介紹,需要的朋友參考下2013-06-06Android編程實現(xiàn)泡泡聊天界面實例詳解(附源碼)
這篇文章主要介紹了Android編程實現(xiàn)泡泡聊天界面,結合實例形式較為詳細的分析了Android泡泡聊天界面的窗體定義與功能實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11Android利用Flutter實現(xiàn)立體旋轉效果
本文主要介紹了Flutter繪圖如何使用ImageShader填充圖形,并且利用 Matrix4的三維變換加上動畫實現(xiàn)了立體旋轉的動畫效果,感興趣的可以嘗試一下2022-06-06