Android開發:驗證碼倒計時功能實現
阿新 • • 發佈:2019-02-03
前言
現在好多個APP裡面都有驗證碼倒計時按鈕,實現方式大概有下面幾種:
- 1.使用執行緒和Handler的方式,定時重新整理倒計時數字,這種方式容易導致記憶體洩露,所以一般都使用弱引用,控制數字的重新整理。
- 2、自定義倒計時按鈕
- 3、使用Android提供的CountDownTimer結合TextView實現倒計時功能
這篇主要就是說下用第三種方式實現,簡單好用
效果圖
實現
以下是核心程式碼:
/**
* Created by hfs on 2017/5/9.
*/
public class TimeCount extends CountDownTimer {
private Button button;
private String tickText;
private String finishText;
/**
* @param millisInFuture 倒計時總時長
* @param countDownInterval 倒計時單位 毫秒.
*/
public TimeCount(long millisInFuture, long countDownInterval,
Button button,String tickText,String finishText) {
super (millisInFuture, countDownInterval);
this.button = button;
this.tickText=tickText;
this.finishText=finishText;
}
@Override
public void onTick(long millisUntilFinished) {
button.setText(millisUntilFinished / 1000 + tickText);
button.setEnabled(false);
}
@Override
public void onFinish() {
button.setEnabled(true);
button.setText(finishText);
}
}
我自己又簡單的封裝成了一個自定義的Button,以後直接用著個自定義的Button即可
/**
* Created by hfs on 2017/5/9.
*/
public class CountDownButton extends Button {
private TimeCount mTimeCount;
private long millisInFuture = 60000;
private long countDownInterval = 1000;
private String mTickText = "s後重新獲取";
private String mFinishText = "重新獲取";
public CountDownButton(Context context) {
super(context);
init(context);
}
public CountDownButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
}
/**
* 設定倒計時多少毫秒結束
* 預設60秒
*
* @param millisInFuture 毫秒
*/
public void setMillisInFuture(long millisInFuture) {
this.millisInFuture = millisInFuture;
}
/**
* 設定倒計時間隔
* 預設1秒
*
* @param countDownInterval 倒計時間隔
*/
public void setCountDownInterval(long countDownInterval) {
this.countDownInterval = countDownInterval;
}
/**
* 設定倒計時過程中button顯示內容
* @param text 預設 s後重新獲取
*/
public void setOnTickText(String text) {
this.mTickText=text;
}
/**
* 設定倒計時結束button顯示內容
* @param finishText 預設 重新獲取
*/
public void setOnFinishText(String finishText){
this.mFinishText=finishText;
}
public void startCount() {
mTimeCount = new TimeCount(millisInFuture, countDownInterval, this, mTickText, mFinishText);
mTimeCount.start();
}
}
使用方法很簡單,就幾行程式碼即可:
public class MainActivity extends AppCompatActivity {
private CountDownButton mCountDownButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCountDownButton = (CountDownButton) findViewById(R.id.btn_count_down);
mCountDownButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCountDownButton.startCount();
}
});
}
}