Android 抢购功能(时间戳之间的倒计时)
Posted BandaYung
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 抢购功能(时间戳之间的倒计时)相关的知识,希望对你有一定的参考价值。
最近做一个商城,有个抢购的功能,所以就写了个时间戳之间的倒计时工具类,其实也蛮简单的,不过还是要贴出来给一些有兴趣的小伙伴看看。
其中主要用到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()方法
@Override
public 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();
以上是关于Android 抢购功能(时间戳之间的倒计时)的主要内容,如果未能解决你的问题,请参考以下文章