突然发现好久没有来过了,之前总是在忙论状态,好不容易歇下来,又没有心情写东西。不过这个情况不好,还是要把自己的心得记录一下,方便以后查看。
倒计时这个功能在很多项目中都会出现,之前大多都是用Timer+Handler或者是CountDownTimer来实现。也看到过Chronometer,但是从来没有用过。趁着今天闲下来了,做一下记录。
Chronometer这个类是android提供了一个计时器组件——Chronometer,继承自TextView。
它的主要功能就是计时。
1.主要配置
· format,显示格式,默认是"MM:SS"或"H:MM:SS",以%s来格式化。
· countDown,是否倒计时,与base时间相比较
2.主要方法
· start(),开始计时
· stop(),停止计时
· setBase(long),设置计时基准时间
· setFormat(String),设置显示格式
· setCountDown(boolean),设置是否是倒计时,只有版本大于24才有效
· setOnChronometerTickListener(OnChronometerTickListener),设置监听器
普通的计时就不写了,直接按照这几个方法来就可以。倒计时的话就需要在监听器里做一下处理了。
首先
setCountDown(boolean);
这个方法是说是否倒计时,不过其实在监听中做了处理这个设置不设置的好像也没什么影响。
其次
setOnChronometerTickListener(OnChronometerTickListener)
关键的就是监听里边的处理。
多说无益,代码贴上;
chronometer.setBase(parse.getTime());
chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
long base = chronometer.getBase();
long cur1 = System.currentTimeMillis();
long l = base - cur1;
if(l<=0){
chronometer.stop();
chronometer.setText("倒计时结束");
}else {
chronometer.setText(format(l));
}
}
});
chronometer.start();
就是对结束时间和当前时间差值进行比较,到时间了就停止,否则就进行显示。
format()方法就是对时间进行处理
这里就不用它本身的format()
private String format(long time){
String day = time/(24*60*60*1000)>9?time/(24*60*60*1000)+"":"0"+time/(24*60*60*1000);
long hourRemain = time%(24*60*60*1000);
String hour = hourRemain/3600000>9?hourRemain/3600000+"":"0"+hourRemain/3600000;
long minRemain = hourRemain%3600000;
String min = minRemain/60000>9?minRemain/60000+"":"0"+minRemain/60000;
long secRemain = minRemain%60000;
String sec = secRemain/1000>9?secRemain/1000+"":"0"+secRemain/1000;
return day+"天"+hour+"小时"+min+"分"+sec+"秒";
}
其实也比较简单,就这样吧!