RxJava

RxJava<第二十八篇>:RxJava实现倒计时

2019-04-02  本文已影响1人  NoBugException

通常情况下,我们可以使用CountDownTimer来优雅的实现时间倒计时,代码如下

<string name="remainder_second">%2ds</string>
<string name="get_code">获取验证码</string>
           //当获取验证码成功的时候倒计时开始
            CountDownTimer timer = new CountDownTimer(60000, 1000) {
                @Override
                public void onTick(long millisUntilFinished) {
                    bt_1.setEnabled(false);
                    bt_1.setText(getString(R.string.remainder_second, millisUntilFinished / 1000));
                }

                @Override
                public void onFinish() {
                    bt_1.setEnabled(true);
                    bt_1.setText(getString(R.string.get_code));
                }
            };
            timer.start();

效果如下:

44.gif

那么RxJava也可以实现时间倒计时,下面将结合RxBinding来实现时间倒计时功能。

    int maxCount = 10;

    RxView.clicks(bt_1)
            .flatMap(new Function<Unit, ObservableSource<Integer>>() {
                @Override
                public ObservableSource<Integer> apply(Unit unit) throws Exception {
                    bt_1.setEnabled(false);
                    bt_1.setText(getString(R.string.remainder_second, maxCount));
                    return Observable.interval(1000, TimeUnit.MILLISECONDS)
                            .take(maxCount)
                            .map(new Function<Long, Integer>() {
                                @Override
                                public Integer apply(Long aLong) throws Exception {
                                    return maxCount - (aLong.intValue() + 1);
                                }
                            });
                }
            })
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer) throws Exception {
            Log.d("aaa", "int:"+integer);
            if(integer.intValue() == 0){
                bt_1.setEnabled(false);
                bt_1.setText(getString(R.string.get_code));
            }else{
                bt_1.setEnabled(false);
                bt_1.setText(getString(R.string.remainder_second, integer));
            }
        }
    });
上一篇 下一篇

猜你喜欢

热点阅读