新的商品详情,对特卖要增加倒计时的功能:


采用了android系统的CountDownTimer这个类


关于这个类的用法:


* Schedule a countdown until a time in the future, with

* regular notifications on intervals along the way.

*

* Example of showing a 30 second countdown in a text field:

*

* <pre class="prettyprint">

* new CountDownTimer(30000, 1000) {

*

* public void onTick(long millisUntilFinished) {

* mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);

* }

*

* public void onFinish() {

* mTextField.setText("done!");

* }

* }.start();


在时间工具类中加了两个方法:

/**

* 获得倒计时的时间间隔

*

* @param dateStr

* @return

*/

public static long getCountdownInterval(String dateStr) {

long interval = 0;


if (StringUtils.isBlank(dateStr)) {

return interval;

}

Date countdownDate = new Date();

try {

countdownDate = DB_DATE_FORMAT.parse(dateStr);

} catch (ParseException e) {

LogUtils.loge("DateUtils", "日期格式有问题");

}

Date now = new Date();

interval = countdownDate.getTime() - now.getTime();

if (interval < 0)

return 0;

return interval;

}


/**

* @param createTime

* @return 返回离当前时刻的时间间隔,以中文形式描述

*/

public static int[] getCountdownIntervalDetails(long intervalSec) {

int[] countdownIntervalDetals = new int[4];

intervalSec = intervalSec / 1000;// 先转成秒

// 天

int day = (int) (intervalSec / (24 * 3600));

countdownIntervalDetals[0] = day;


intervalSec = intervalSec - day * (24 * 3600);


// 时

int hour = (int) (intervalSec / 3600);

countdownIntervalDetals[1] = hour;


intervalSec = intervalSec - hour * 3600;


// 分

int min = (int) (intervalSec / 60);

countdownIntervalDetals[2] = min;


intervalSec = intervalSec - min * 60;


countdownIntervalDetals[3] = (int) intervalSec;


return countdownIntervalDetals;

}


最后,组装成一个控件:


/**

* 倒计时控件

*/

public class L_CountdownBlock implements Y_UIBlock {


private Context mContext;

private View container;

private CountDownTimer cdt;

private TextView tv_countdown_day;

private TextView tv_countdown_hour;

private TextView tv_countdown_min;

private TextView tv_countdown_sec;

protected int[] intervalDetails;


public L_CountdownBlock(View view) {

this.container = view;

this.mContext = container.getContext();

}


/**

* 设置结束时间

*

* @param dateStr

*/

private void setDate(String dateStr) {

long interval = DateUtils.getCountdownInterval(dateStr);

cdt = new CountDownTimer(interval, 1000) {

@Override

public void onTick(long millisUntilFinished) {

intervalDetails = DateUtils

.getCountdownIntervalDetails(millisUntilFinished);

tv_countdown_day.setText(intervalDetails[0] + "");

tv_countdown_hour.setText(intervalDetails[1] + "");

tv_countdown_min.setText(intervalDetails[2] + "");

tv_countdown_sec.setText(intervalDetails[3] + "");

}


@Override

public void onFinish() {

//TODO 加了倒计时结束的逻辑

}


};

cdt.start();

}


/**

* 取消倒计时

*/

private void cancelCountdown() {

if (null != cdt) {

cdt.cancel();

}

}


@Override

public <T> void update(T t) {

tv_countdown_day = (TextView) container

.findViewById(R.id.tv_countdown_day);

tv_countdown_hour = (TextView) container

.findViewById(R.id.tv_countdown_hour);

tv_countdown_min = (TextView) container

.findViewById(R.id.tv_countdown_min);

tv_countdown_sec = (TextView) container

.findViewById(R.id.tv_countdown_sec);

setDate((String) t);

}


@Override

public View getContentView() {

return container;

}

}


更多相关文章

  1. Android 5.0新控件 AppBarLayout | 嵌套布局 介绍及使用详情
  2. RecyclerView Android RecyclerView 使用完全解析 体验艺术般的
  3. Android 自定义缩短Toast显示时间
  4. android 调用android系统的对话框控件
  5. 初识Android之(一)-自定义标题栏控件
  6. Android中如何比较两个时间值的大小.

随机推荐

  1. Android源码下载,利用一个shell脚本
  2. 【Android】Intent 和 Intent Filter
  3. Android中的DrawRect()参数解析
  4. Android(安卓)文件的保存和读取
  5. 《Android面试宝典》学习笔记(第四章:对话
  6. Android(安卓)Studio Error:Cause: org/g
  7. 2010.10.30———Android(安卓)03
  8. Android(安卓)Studio多渠道批量打包及代
  9. Android内核的编译与裁剪
  10. Android主线程里不允许网络操作