Android倒计时工具类CountDownTimer

时间:2022-01-21 22:01:42

在开发中很多地方都会用到倒计时功能,例如限时抢购、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()方法,用来取消当前倒计时任务。

效果图
Android倒计时工具类CountDownTimer

Android倒计时工具类CountDownTimer