在开发中很多地方都会用到倒计时功能,例如限时抢购、12306支付倒计时、短信验证码120s倒计时等等,之前一直使用Handler + Runnable来实现,后来发现Android自带的CountDownTimer这个工具类很好用,也是通过Handler和子线程来实现的。使用起来很方便,示例代码如下:
package com.example.countdowntimer;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private TextView tvCount;
private Button btnBegin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvCount = (TextView) findViewById(R.id.tvCount);
btnBegin = (Button) findViewById(R.id.btnBegin);
btnBegin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
cdTimer.start();
}
});
}
/** * Parameters: * millisInFuture The number of millis in the future from the call to start() until the countdown is done and onFinish() is called. * countDownInterval The interval along the way to receive onTick(long) callbacks. */
private CountDownTimer cdTimer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
tvCount.setText((millisUntilFinished / 1000) + " s");
}
@Override
public void onFinish() {
tvCount.setText("0 s");
Toast.makeText(MainActivity.this, "CountDownFinish", Toast.LENGTH_SHORT).show();
}
};
}
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" >
<TextView android:id="@+id/tvCount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textSize="28dp" android:text="10s" />
<Button android:id="@+id/btnBegin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tvCount" android:layout_centerHorizontal="true" android:text="开始计时"/>
</RelativeLayout>
CountDownTimer的构造方法有两个参数:
第一个参数:从调用start()开始,到计时结束的时间,也就是倒计时的总时间,单位为毫秒;
第二个参数:倒计时间的隔时间,单位为毫秒;
主要方法:
onTick(long millisUntilFinished),当前任务每间隔countDownInterval时间时回调。
onFinish(),当前倒计时任务完成的时候回调。
start(),启动当前的任务。
另外还有一个cancel()方法,用来取消当前倒计时任务。
效果图