阅读背景:

倒计时计时器工具类

来源:互联网 
/** 利用timer和handler进行循环计数,使其操作更加方便,计时更加准确 startCountDownTime()开始计数 stop()停止计数 */ public class CountDownTimeUtilTest { private static CountDownTimeUtilTest countDownTimeUtil=null; private CountDownTimeUtilTest() { } public static CountDownTimeUtilTest getInstance(){ if(countDownTimeUtil==null){ synchronized (CountDownTimeUtilTest.class){ if(countDownTimeUtil==null){ countDownTimeUtil=new CountDownTimeUtilTest(); } } } return countDownTimeUtil; } private TextView tv_count_after; //进行计算时间 public void startCountDownTime(long time1, long time2,TextView tv_count_after) { this.tv_count_after=tv_count_after; long day = 0; long hour = 0; long min = 0; long sec = 0; long diff=0; if (time1 == -1 || time1 == -1) { tv_count_after.setText("00小时00分00秒"); return; } else if (time1 <= time2) { diff = time2 - time1; }else{ tv_count_after.setText("00小时00分00秒 已超时"); diff=time1 - time2; } // LogUtil.e("TAG", "time1==" + time1 + " time2=" + time2 + " diff=" + diff); // 如果是10位的时间戳 就是秒 13位的浩渺 day = diff / (24 * 60 * 60); hour = (diff / (60 * 60) - day * 24); min = ((diff / (60)) - day * 24 * 60 - hour * 60); sec = (diff - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); // return day + "天" + hour + "小时" + min + "分钟" + sec + "秒"; // return day + "天。"; if(time1 > time2){ // 如果超时了 return; } setTime((int) day, (int) hour, (int) min, (int) sec); //在启动先进行进行停止 stop(); start(); } // 下面是进行倒计时 private Timer timer; private int day_decade; //天的十位 private int day_unit; //天的个位 private int hour_decade; //小时的十位 private int hour_unit; //小时的个位 private int min_decade; private int min_unit; private int sec_decade; private int sec_unit; @SuppressLint("HandlerLeak") private Handler handler = new Handler() { public void handleMessage(Message msg) { countDown(); } }; private void start() { if (timer == null) { timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(0); } }, 0, 1000); } } public void stop() { if (timer != null) { timer.cancel(); timer = null; } if (handler != null) { handler.removeMessages(0); } } //这是进行设置文字 private void setTime(int day, int hour, int min, int sec) { if (day < 0 || hour >= 60 || min >= 60 || sec >= 60 || hour < 0 || min < 0 || sec < 0) { throw new RuntimeException("时间格式错误,请检查你的代码"); } day_decade = day / 10; day_unit = day - day_decade * 10; hour_decade = hour / 10; hour_unit = hour - hour_decade * 10; min_decade = min / 10; min_unit = min - min_decade * 10; sec_decade = sec / 10; sec_unit = sec - sec_decade * 10; //设置时间 setTimeText(); } private void countDown() { if (isCarry4Unit(sec_unit, SECOND)) { // LogUtil.e("TAG", "sec_unit1====" + sec_unit); if (isCarry4Decade(sec_decade, SECOND)) { // LogUtil.e("TAG", "sec_decade2====" + sec_decade); if (isCarry4Unit(min_unit, MINUTE)) { LogUtil.e("TAG", "min_unit3====" + min_unit); if (isCarry4Decade(min_decade, MINUTE)) { LogUtil.e("TAG", "min_decade4====" + min_decade); if (isCarry4Unit(hour_unit, HOUR)) { // LogUtil.e("TAG", "hour_unit5====" + hour_unit); if (isCarry4Decade(hour_decade, HOUR)) { // LogUtil.e("TAG", "hour_decade6====" + hour_decade); if (isCarry4Unit(day_unit, DAY)) { // LogUtil.e("TAG", "hour_unit7====" + hour_decade); if (isCarry4Decade(day_decade, DAY)) { // LogUtil.e("TAG", "hour_decade8====" + hour_decade); // Toast.makeText(mContext, "计数完成", Toast.LENGTH_SHORT).show(); stop(); setTime(0, 0, 0, 0);//重置为0 } } } } } } } } } private boolean isCarry4Unit(int time, int style) { time = time - 1; if (time < 0) { time = 9; setTimeFromUnit(time, style); return true; } else { setTimeFromUnit(time, style); return false; } } private void setTimeFromUnit(int time, int style) { switch (style) { case DAY: day_unit = time; break; case HOUR: hour_unit = time; break; case MINUTE: min_unit = time; break; case SECOND: sec_unit = time; break; } setTimeText(); } private boolean isCarry4Decade(int time, int style) { time = time - 1; if (time < 0) { time = 5; setTimeFromDecade(time, style); return true; } else { setTimeFromDecade(time, style); return false; } } private static final int DAY = 0; private static final int HOUR = 1; private static final int MINUTE = 2; private static final int SECOND = 3; private void setTimeFromDecade(int time, int style) { switch (style) { case DAY: day_decade = time; break; case HOUR: hour_decade = time; break; case MINUTE: min_decade = time; break; case SECOND: sec_decade = time; break; } setTimeText(); } private void setTimeText() { //进行设置时间 //XX小时XX分XX秒 if (day_decade == 0 && day_unit == 0) { tv_count_after.setText("" + hour_decade + hour_unit + "小时" + min_decade + min_unit + "分" + sec_decade + sec_unit + "秒"); } else { tv_count_after.setText("" + day_decade + day_unit + "天" + hour_decade + hour_unit + "小时" + min_decade + min_unit + "分" + sec_decade + sec_unit + "秒"); } //这是点击确定后返回的情况 我应该进行判断 如果是小于十分钟 就直接进入下一级 否则 弹窗显示 if (day_decade == 0 && day_unit == 0 && hour_decade == 0 && hour_unit == 0 && min_decade == 0 && min_unit == 0 && sec_decade == 0 && sec_unit == 0) { LogUtil.e("TAG", "当前时间为0"); tv_count_after.setText("00小时00分00秒 已超时"); } else if(day_decade == 0 && day_unit == 0 && hour_decade == 0 && hour_unit == 0 && min_decade <= 2){ LogUtil.e("TAG", "当前时间小于30分钟"); }else if (day_decade == 0 && day_unit == 0 && hour_decade == 0 && hour_unit == 0 && min_decade == 0) { // LogUtil.e("TAG", "当前时间小于十分钟"); } else { // LogUtil.e("TAG", "当前时间大于十分钟"); } } } /** 利用timer和handler进行循环计数,使其操作更加方便,计时更加准确 startCo



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: