您好,登錄后才能下訂單哦!
今天小編給大家分享一下Android封裝怎么實現短信驗證碼的獲取倒計時的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
如圖所示的效果相信大家都不陌生,我們可以使用很多種方法去實現此效果,這里自己采用CountDownTimer
定時器簡單封裝下此效果,方便我們隨時調用。
首頁先在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>
下面是實現的具體代碼,很簡單的一種方式,通俗易懂:
/** * Created by xiaolong on 2018/1/12. */ @SuppressLint("AppCompatCustomView") public class CountDownButton extends Button{ //總時長 private long millisinfuture; //間隔時長 private long countdowninterva; //默認背景顏色 private int normalColor; //倒計時 背景顏色 private int countDownColor; //是否結束 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); //設置默認時長 millisinfuture = (long) typedArray.getInt(R.styleable.CountDownButton_millisinfuture,60000); //設置默認間隔時長 countdowninterva = (long)typedArray.getInt(R.styleable.CountDownButton_countdowninterva,1000); //設置默認背景色 normalColor = typedArray.getColor(R.styleable.CountDownButton_normalColor,android.R.color.holo_blue_light); //設置默認倒計時 背景色 countDownColor = typedArray.getColor(R.styleable.CountDownButton_countDownColor,android.R.color.darker_gray); typedArray.recycle(); //默認為已結束狀態 isFinish = true; //字體居中 setGravity(Gravity.CENTER); //默認文字和背景色 normalBackground(); //設置定時器 countDownTimer = new CountDownTimer(millisinfuture, countdowninterva) { @Override public void onTick(long millisUntilFinished) { //未結束 isFinish = false; setText((Math.round((double) millisUntilFinished / 1000) - 1) + "秒"); setBackgroundResource(countDownColor); } @Override public void onFinish() { //結束 isFinish = true; normalBackground(); } }; } private void normalBackground(){ setText("獲取驗證碼"); setBackgroundResource(normalColor); } public boolean isFinish() { return isFinish; } public void cancel(){ countDownTimer.cancel(); } public void start(){ countDownTimer.start(); } }
一個簡單的調用方式:
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) { //這里判斷是否倒計時結束,避免在倒計時時多次點擊導致重復請求接口 if (countDownButton.isFinish()) { //發送驗證碼請求成功后調用 countDownButton.start(); } } }); } @Override protected void onDestroy() { super.onDestroy(); if (!countDownButton.isFinish()) { countDownButton.cancel(); } } }
以上就是“Android封裝怎么實現短信驗證碼的獲取倒計時”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。