最近做一个商城,有个抢购的功能,所以就写了个时间戳之间的倒计时工具类,其实也蛮简单的,不过还是要贴出来给一些有兴趣的小伙伴看看。

其中主要用到Android提供了CountDownTimer倒计时类

public CountDownTimer(long millisInFuture, long countDownInterval){}参数1,设置倒计时的总时间(毫秒)参数2,设置间隔时长(毫秒)

其中对应有两个方法:

//每间隔countDownInterval调用一次,millisUntilFinished表示还剩多少毫秒public abstract void onTick(long millisUntilFinished);//倒计时结束时执行public abstract void onFinish();

开始跟取消,对应的调用方式:

CountDownTimer timer=....;//开始倒计时timer.start()//取消倒计时timer.cancel()//在宿主Activity或fragment生命周期结束时,记得调用timer.cancle()方法@Overridepublic void onDestroy() {    if(timer!=null){        timer.cancel();        timer = null;    }    super.onDestroy();}

进入正题, 时间戳之间的倒计时工具类

public class CountDownUtil {    private CountDownTimer mTimer;    private int interval = 1000;    public CountDownUtil() {    }    /**     * 日期转时间戳     *     * @param date     * @param format     * @return     */    public static long getTimeStamp(String date, String format) {        return DateUtil.strToDate(date, format).getTime();    }    /**     * 开始倒计时     *     * @param startTime      开始时间(时间戳)     * @param minuteInterval 时间间隔(单位:分)     * @param callBack     */    public void start(long startTime, int minuteInterval, OnCountDownCallBack callBack) {        long lengthTime = minuteInterval * 60 * interval;        //查看是否为毫秒的时间戳        boolean isMillSecond = (String.valueOf(startTime).length() == 13);        startTime = startTime * (isMillSecond ? 1 : interval);        long endTime = startTime + lengthTime;        long curTime = System.currentTimeMillis();        mTimer = getTimer(endTime - curTime, interval, callBack);        if (Math.abs(curTime - startTime) > lengthTime) {            if (callBack != null) {                callBack.onFinish();            }        } else {            mTimer.start();        }    }    private CountDownTimer getTimer(long millisInFuture, long interval, OnCountDownCallBack callBack) {        return new CountDownTimer(millisInFuture, interval) {            @Override            public void onTick(long millisUntilFinished) {                int day = 0;                int hour = 0;                int minute = (int) (millisUntilFinished / interval / 60);                int second = (int) (millisUntilFinished / interval % 60);                if (minute > 60) {                    hour = minute / 60;                    minute = minute % 60;                }                if (hour > 24) {                    day = hour / 24;                    hour = hour % 24;                }                if (callBack != null) {                    callBack.onProcess(day, hour, minute, second);                }            }            @Override            public void onFinish() {                if (callBack != null) {                    callBack.onFinish();                }            }        };    }    /**     * 开始倒计时     *     * @param endTime  结束时间(时间戳)     * @param callBack     */    public void start(long endTime, OnCountDownCallBack callBack) {        long curTime = System.currentTimeMillis();        mTimer = getTimer(endTime - curTime, interval, callBack);        if (endTime < curTime) {            if (callBack != null) {                callBack.onFinish();            }        } else {            mTimer.start();        }    }    /**     * 必用     */    public void onDestroy() {        if (mTimer != null) {            mTimer.cancel();            mTimer = null;        }    }    public interface OnCountDownCallBack {        void onProcess(int day, int hour, int minute, int second);        void onFinish();    }}

更多相关文章

  1. [置顶] 如何使Android应用程序获取系统权限来修改系统时间
  2. Android客户端性能参数监控
  3. Android 时间戳和时间之间的转化
  4. android取得系统时间
  5. Android 获取几天后的时间
  6. Android中图形参数及图形内存信息获取
  7. Android 读取SIM卡参数
  8. Android(Java):长时间未登录提醒
  9. Android页面跳转是如何传递参数的

随机推荐

  1. Android(安卓)JNI入门第二篇——Java参数
  2. Android秋招提前批:大厂三面对答如流,原来
  3. 导入android源码有错,R.java文件不能自动
  4. Android(安卓)混淆其实很简单
  5. 如何检测android上的多媒体文件属于音频
  6. 【转】wakelock使用注意事项
  7. WebView的介绍与简单实现Android和H5互调
  8. Android(安卓)调用系统相机,解决回调的res
  9. Android(安卓)studio 通过xml文件设置点
  10. android中的目录结构介绍