Chronometer实现倒计时

突然发现好久没有来过了,之前总是在忙论状态,好不容易歇下来,又没有心情写东西。不过这个情况不好,还是要把自己的心得记录一下,方便以后查看。

倒计时这个功能在很多项目中都会出现,之前大多都是用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+"秒";
    }

其实也比较简单,就这样吧!

你可能感兴趣的:(Chronometer实现倒计时)