Android 倒计时(支持小时,分钟)

参考:https://www.jianshu.com/p/4e5c0d58c90c

1.背景

    需要做一个考试时间的倒计时,自己也有想法,但还是不想重复造轮子,直到发现除了timer之外,android还有一个

CountDownTimer。

2.效果图

3.代码

package mvp.study.skymobile.com.testandroidmethod.view;

import android.os.CountDownTimer;

/**
 * Author:boshuai.li
 * Time:2020/3/17   11:42
 * Description: 倒计时的工具类
 */
public class PeterTimeCountRefresh extends CountDownTimer {

    private OnTimerFinishListener finishListener;
    private OnTimerProgressListener progressListener;

    /**
     * @param millisInFuture    分钟转换成 毫秒
     * @param countDownInterval 计时的时间间隔
     */
    public PeterTimeCountRefresh(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);//参数依次为总时长,和计时的时间间隔,要显示的按钮
    }


    @Override
    public void onTick(long millisUntilFinished) {//计时过程显示
        if (progressListener != null) {
            progressListener.onTimerProgress(millisUntilFinished);
        }
    }

    @Override
    public void onFinish() {//计时完毕时触发
        if (finishListener != null) {
            finishListener.onTimerFinish();
        }
    }

    /**
     * 设置timer走完的回调
     */
    public void setOnTimerFinishListener(OnTimerFinishListener finishListener) {
        this.finishListener = finishListener;
    }

    /**
     * 设置监听进度的
     */
    public void setOnTimerProgressListener(OnTimerProgressListener progressListener) {
        this.progressListener = progressListener;
    }

    /**
     * Timer 执行完成的回调
     */
    public interface OnTimerFinishListener {

        void onTimerFinish();
    }

    /**
     * Timer 进度的监听
     */
    public interface OnTimerProgressListener {

        void onTimerProgress(long timeLong);
    }
}

4.使用方法

PeterTimeCountRefresh timer = new PeterTimeCountRefresh(musicDuration, 1000);
timer.setOnTimerProgressListener(new PeterTimeCountRefresh.OnTimerProgressListener() {
	@Override
	public void onTimerProgress(long timeLong) {
		String text = TimeUtils.parseDuration(timeLong);
		PLog.i("onTimerProgress timeLong = " + timeLong + ", text = " + text);
		tv.setText(text);
	}
});
timer.setOnTimerFinishListener(new PeterTimeCountRefresh.OnTimerFinishListener() {
	@Override
	public void onTimerFinish() {
		PLog.i("onTimerFinish enter");
	}
});
timer.start();

5.总结

    缺点在不支持暂停和继续,只有取消操作,如果想拓展的小伙伴,可以额外增加一下功能。源码很简单,有兴趣的小伙伴也可以研究下,很有好处的。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值