Android封裝實現(xiàn)短信驗證碼的獲取倒計時

如圖所示的效果相信大家都不陌生,我們可以使用很多種方法去實現(xiàn)此效果,這里自己采用CountDownTimer定時器簡單封裝下此效果,方便我們隨時調(diào)用。
首頁先在attrs.xml中定義下所需的幾個屬性:
<resources>
<declare-styleable name="CountDownButton">
<attr name="millisinfuture" format="integer"/>
<attr name="countdowninterva" format="integer"/>
<attr name="normalColor" format="color"/>
<attr name="countDownColor" format="color"/>
</declare-styleable>
</resources>下面是實現(xiàn)的具體代碼,很簡單的一種方式,通俗易懂:
/**
* Created by xiaolong on 2018/1/12.
*/
@SuppressLint("AppCompatCustomView")
public class CountDownButton extends Button{
//總時長
private long millisinfuture;
//間隔時長
private long countdowninterva;
//默認(rèn)背景顏色
private int normalColor;
//倒計時 背景顏色
private int countDownColor;
//是否結(jié)束
private boolean isFinish;
//定時器
private CountDownTimer countDownTimer;
public CountDownButton(Context context) {
this(context,null);
}
public CountDownButton(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CountDownButton,defStyleAttr,0);
//設(shè)置默認(rèn)時長
millisinfuture = (long) typedArray.getInt(R.styleable.CountDownButton_millisinfuture,60000);
//設(shè)置默認(rèn)間隔時長
countdowninterva = (long)typedArray.getInt(R.styleable.CountDownButton_countdowninterva,1000);
//設(shè)置默認(rèn)背景色
normalColor = typedArray.getColor(R.styleable.CountDownButton_normalColor,android.R.color.holo_blue_light);
//設(shè)置默認(rèn)倒計時 背景色
countDownColor = typedArray.getColor(R.styleable.CountDownButton_countDownColor,android.R.color.darker_gray);
typedArray.recycle();
//默認(rèn)為已結(jié)束狀態(tài)
isFinish = true;
//字體居中
setGravity(Gravity.CENTER);
//默認(rèn)文字和背景色
normalBackground();
//設(shè)置定時器
countDownTimer = new CountDownTimer(millisinfuture, countdowninterva) {
@Override
public void onTick(long millisUntilFinished) {
//未結(jié)束
isFinish = false;
setText((Math.round((double) millisUntilFinished / 1000) - 1) + "秒");
setBackgroundResource(countDownColor);
}
@Override
public void onFinish() {
//結(jié)束
isFinish = true;
normalBackground();
}
};
}
private void normalBackground(){
setText("獲取驗證碼");
setBackgroundResource(normalColor);
}
public boolean isFinish() {
return isFinish;
}
public void cancel(){
countDownTimer.cancel();
}
public void start(){
countDownTimer.start();
}
}一個簡單的調(diào)用方式:
public class MainActivity extends AppCompatActivity {
private CountDownButton countDownButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countDownButton = ((CountDownButton) findViewById(R.id.countDownButton));
countDownButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//這里判斷是否倒計時結(jié)束,避免在倒計時時多次點擊導(dǎo)致重復(fù)請求接口
if (countDownButton.isFinish()) {
//發(fā)送驗證碼請求成功后調(diào)用
countDownButton.start();
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (!countDownButton.isFinish()) {
countDownButton.cancel();
}
}
}這樣一個簡單的封裝就結(jié)束了,過程很簡單。這里主要是對CountDownTimer的使用練習(xí),之前工作中一直沒有接觸過這個類。傳送門
到此這篇關(guān)于Android封裝實現(xiàn)短信驗證碼的獲取倒計時的文章就介紹到這了,更多相關(guān)Android封裝倒計時內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- OpenHarmony實現(xiàn)類Android短信驗證碼及倒計時流程詳解
- Android自定義短信倒計時view流程分析
- Android使用CountDownTimer模擬短信驗證倒計時
- Android使用Kotlin和RxJava 2.×實現(xiàn)短信驗證碼倒計時效果
- Android 用RxBinding與RxJava2實現(xiàn)短信驗證碼倒計時功能
- Android實現(xiàn)發(fā)送短信驗證碼倒計時功能示例
- Android短信驗證碼倒計時驗證的2種常用方式
- Android自定義Chronometer實現(xiàn)短信驗證碼秒表倒計時功能
- Android開發(fā)之獲取短信驗證碼后按鈕背景變化并且出現(xiàn)倒計時
相關(guān)文章
Android使用Rotate3dAnimation實現(xiàn)3D旋轉(zhuǎn)動畫效果的實例代碼
利用Android的ApiDemos的Rotate3dAnimation實現(xiàn)了個圖片3D旋轉(zhuǎn)的動畫,圍繞Y軸進行旋轉(zhuǎn),還可以實現(xiàn)Z軸的縮放。點擊開始按鈕開始旋轉(zhuǎn),點擊結(jié)束按鈕停止旋轉(zhuǎn)。2018-05-05
Android 下載網(wǎng)絡(luò)圖片并顯示到本地
本文主要介紹了Android實現(xiàn)下載網(wǎng)絡(luò)圖片并顯示到本地功能的示例代碼。具有很好的參考價值,下面跟著小編一起來看下吧2017-03-03
Flutter實現(xiàn)Android滾動懸浮效果過程
這篇文章主要介紹了Flutter實現(xiàn)Android滾動懸浮效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
Android通知欄增加快捷開關(guān)的功能實現(xiàn)教程
對于Android來說其中一項很方便的操作便是下拉菜單,下拉菜單欄可以快捷打開某項設(shè)置,這篇文章主要給大家介紹了關(guān)于Android通知欄增加快捷開關(guān)的功能實現(xiàn),需要的朋友可以參考下2023-01-01
Android序列化接口Parcelable與Serializable接口對比
我們使用 Intent 傳遞數(shù)據(jù)的時候,putExtra() 所支持的數(shù)據(jù)類型事有限的,當(dāng)需要傳遞自定義對象的時候就需要序列化。Serializable更簡單但是會把整個對象進行序列化因此效率比Parcelable低一些2023-02-02
Android自定義ViewPager實現(xiàn)縱向滑動翻頁效果
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewPager實現(xiàn)縱向滑動翻頁效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07

