倒计时的CountDownTimer
生活随笔
收集整理的這篇文章主要介紹了
倒计时的CountDownTimer
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
直接看這里吧,我只是搬運工。
?
定時執行在一段時候后停止的倒計時,在倒計時執行過程中會在固定間隔時間得到通知(譯者:觸發onTick方法),下面的例子顯示在一個文本框中顯示一個30s倒計時:?
Java代碼?? new?CountdownTimer(30000,?1000)?{?? ?????public?void?onTick(long?millisUntilFinished)?{?? ?????????mTextField.setText("seconds?remaining:?"?+?millisUntilFinished?/?1000);?? ?????}?? ?????public?void?onFinish()?{?? ?????????mTextField.setText("done!");?? ?????}?? ?}.start();???
onTick的調用是同步的,保證這次調用不會在之前調用完成前發生。這里的同步機制主要是用來:onTick的實現需要很多時間執行比倒計時間隔更重要的事情。?
構造函數?
???????? public CountDownTimer (long millisInFuture, long countDownInterval)?
參數?
?????????????????? millisInFuture? 從開始調用start()到倒計時完成并onFinish()方法被調用的毫秒數。(譯者注:倒計時時間,單位毫秒)?
?????????????????? countDownInterval? 接收onTick(long)回調的間隔時間。(譯者注:單位毫秒)?
公共方法?
public final void cancel ()?
???????? 取消倒計時(譯者:取消后,再次啟動會重新開始倒計時)????????
??????????????????
public abstract void onFinish ()?
???????? 倒計時完成時被調用????
public abstract void onTick (long millisUntilFinished)?
???????? 固定間隔被調用?
參數?
??????????????????????????? millisUntilFinished?? 倒計時剩余時間。?
public synchronized final CountDownTimer start ()?
???????? 啟動倒計時?
Java代碼?? import?android.app.Activity;?? import?android.os.Bundle;?? import?android.os.CountDownTimer;?? import?android.util.Log;?? import?android.view.View;?? import?android.view.View.OnClickListener;?? import?android.widget.Button;?? import?android.widget.TextView;?? ??? import?com.test.R;?? ??? public?class?CountDownTimeActivity?extends?Activity?implements?OnClickListener?{?? ??? ????TextView?mTextView;?? ????Button?mButton1;?? ????Button?mButton2;?? ????? ????@Override?? ????protected?void?onCreate(Bundle?savedInstanceState)?{?? ???????super.onCreate(savedInstanceState);?? ???????? ???????setContentView(R.layout.countdown);?? ???????? ???????mTextView?=?(TextView)findViewById(R.id.textView1);?? ???????mButton1?=?(Button)findViewById(R.id.button1);?? ???????mButton2?=?(Button)findViewById(R.id.button2);?? ???????mButton1.setOnClickListener(this);?? ???????mButton2.setOnClickListener(this);?? ????}?? ??? ????CountDownTimer?timer?=?new?CountDownTimer(40000,1000)?{?? ???????? ???????@Override?? ???????public?void?onTick(long?millisUntilFinished)?{?? ???????????mTextView.setText("seconds?remaining:?"?+?millisUntilFinished?/?1000);?? ???????????try?{?? ??????????????Thread.sleep(1200);?? ???????????}?catch?(InterruptedException?e)?{?? ??????????????e.printStackTrace();?? ???????????}?? ???????????Log.e("CountDown",millisUntilFinished+"");?? ???????}?? ???????? ???????@Override?? ???????public?void?onFinish()?{?? ???????????mTextView.setText("done!");?? ???????}?? ????};?? ????? ????@Override?? ????public?void?onClick(View?v)?{?? ???????switch(v.getId()){?? ???????case?R.id.button1:?? ???????????timer.start();?? ???????????break;?? ???????case?R.id.button2:?? ???????????timer.cancel();?? ???????????break;?? ???????}?? ???????? ????}?? } ?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activation);
initView();
resendBTCountDownTimer(resendBtn,false);
}
/**
* 重發驗證碼按鈕倒計時操作
* @param resendBtn
* @param resendCode: false初始化并倒計時開始;true點擊次數倒計時開始并重新獲取驗證碼操作
*/
public void resendBTCountDownTimer(final Button resendBtn,boolean resendCode){
if(resendCount>5){
resendBtn.setText(R.string.resentcode_5times_tips);
resendBtn.setEnabled(false);
resendBtn.setBackgroundResource(R.drawable.button_no_cliable);
return;
}else{
new CountDownTimer(MILLIS_INFUTURE, COUNTDOWN_INTERVAL) {
@Override
public void onTick(long millisUntilFinished) {
resendBtn.setEnabled(false);
resendBtn.setBackgroundResource(R.drawable.button_no_cliable);
resendBtn.setText(getString(R.string.regetcodeafter30s, millisUntilFinished/1000));
}
@Override
public void onFinish() {
resendBtn.setText(R.string.resend_code);
resendBtn.setEnabled(true);
resendBtn.setBackgroundResource(R.drawable.registbtn);
}
}.start();
if(resendCode){
resendCount++ ;
regetCheckCodeFun();
}
}
}
定時執行在一段時候后停止的倒計時,在倒計時執行過程中會在固定間隔時間得到通知(譯者:觸發onTick方法),下面的例子顯示在一個文本框中顯示一個30s倒計時:?
Java代碼??
onTick的調用是同步的,保證這次調用不會在之前調用完成前發生。這里的同步機制主要是用來:onTick的實現需要很多時間執行比倒計時間隔更重要的事情。?
構造函數?
???????? public CountDownTimer (long millisInFuture, long countDownInterval)?
參數?
?????????????????? millisInFuture? 從開始調用start()到倒計時完成并onFinish()方法被調用的毫秒數。(譯者注:倒計時時間,單位毫秒)?
?????????????????? countDownInterval? 接收onTick(long)回調的間隔時間。(譯者注:單位毫秒)?
公共方法?
public final void cancel ()?
???????? 取消倒計時(譯者:取消后,再次啟動會重新開始倒計時)????????
??????????????????
public abstract void onFinish ()?
???????? 倒計時完成時被調用????
public abstract void onTick (long millisUntilFinished)?
???????? 固定間隔被調用?
參數?
??????????????????????????? millisUntilFinished?? 倒計時剩余時間。?
public synchronized final CountDownTimer start ()?
???????? 啟動倒計時?
Java代碼??
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activation);
initView();
resendBTCountDownTimer(resendBtn,false);
}
/**
* 重發驗證碼按鈕倒計時操作
* @param resendBtn
* @param resendCode: false初始化并倒計時開始;true點擊次數倒計時開始并重新獲取驗證碼操作
*/
public void resendBTCountDownTimer(final Button resendBtn,boolean resendCode){
if(resendCount>5){
resendBtn.setText(R.string.resentcode_5times_tips);
resendBtn.setEnabled(false);
resendBtn.setBackgroundResource(R.drawable.button_no_cliable);
return;
}else{
new CountDownTimer(MILLIS_INFUTURE, COUNTDOWN_INTERVAL) {
@Override
public void onTick(long millisUntilFinished) {
resendBtn.setEnabled(false);
resendBtn.setBackgroundResource(R.drawable.button_no_cliable);
resendBtn.setText(getString(R.string.regetcodeafter30s, millisUntilFinished/1000));
}
@Override
public void onFinish() {
resendBtn.setText(R.string.resend_code);
resendBtn.setEnabled(true);
resendBtn.setBackgroundResource(R.drawable.registbtn);
}
}.start();
if(resendCode){
resendCount++ ;
regetCheckCodeFun();
}
}
}
總結
以上是生活随笔為你收集整理的倒计时的CountDownTimer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TextWatcher() 的用法
- 下一篇: dp 与px互相转换