Android實(shí)現(xiàn)倒計(jì)時(shí)兩種方式

CountDownTimer倒計(jì)時(shí)

  • 定義一個(gè)倒計(jì)時(shí)的值和間隔
    private static final long MILLIS_IN_FUTURE = 60000;
    private static final long COUNT_DOWN_INTERVAL = 1000;
  • 定義一個(gè)TimeCount類繼承CountDownTimer
private class TimeCount extends CountDownTimer {

        TimeCount(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onTick(long millisUntilFinished) {
            if (mTvGetCode != null) {
                mTvGetCode.setClickable(false);
                String second = millisUntilFinished / 1000 + "秒";
                mTvGetCode.setText(second);
            }
        }

        @Override
        public void onFinish() {
            if (mTvGetCode != null) {
                mTvGetCode.setText("獲取驗(yàn)證碼");
                mTvGetCode.setClickable(true);
            }
        }
    }
  • new TimeCount并在請(qǐng)求接口成功后調(diào)用start()
timecount = new TimeCount(MILLIS_IN_FUTURE, COUNT_DOWN_INTERVAL);
timecount.start();
  • 最后結(jié)束當(dāng)前頁(yè)面時(shí)取消TimeCount
timecount.cancel();

RxAndroid 倒計(jì)時(shí)

  • 定義一個(gè)subscriber
private Subscriber<Long> subscriber;
  • 在請(qǐng)求接口成功后開始訂閱
private void Test() {
        final int count = 60;
        Observable<Long> ob = Observable.interval(1, TimeUnit.SECONDS)
                .take(count)
                .map(new Func1<Long, Long>() {
                    @Override
                    public Long call(Long aLong) {
                        return count - aLong;
                    }
                }).doOnSubscribe(new Action0() {
                    @Override
                    public void call() {
                        mTvGetCode.setClickable(false);
                    }
                }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());
        subscriber = new Subscriber<Long>() {
            @Override
            public void onNext(Long aLong) {
                if (mTvGetCode != null) {
                    mTvGetCode.setText(aLong + "秒");
                }
            }

            @Override
            public void onCompleted() {
                if (mTvGetCode != null) {
                    mTvGetCode.setText("獲取驗(yàn)證碼");
                    mTvGetCode.setClickable(true);
                }
            }

            @Override
            public void onError(Throwable e) {
            }
        };
        ob.subscribe(subscriber);
    }
  • 最后結(jié)束當(dāng)前頁(yè)面時(shí)取消訂閱
subscriber.unsubscribe();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 注:只包含標(biāo)準(zhǔn)包中的操作符,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,366評(píng)論 2 8
  • 注:只包含標(biāo)準(zhǔn)包中的操作符,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 1,054評(píng)論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符。對(duì)于擴(kuò)展包,由于使用率較低,如有需求,請(qǐng)讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 46,201評(píng)論 8 93
  • “慈云書畫院‘’緣起 新野人 九州風(fēng)雅,乾坤朗朗。諸子百家,競(jìng)相鳴...
    歸一堂閱讀 559評(píng)論 2 1

友情鏈接更多精彩內(nèi)容