RxJava奇淫技巧-实现倒计时的功能

简介: 代码如下
 /**
     * 开启倒计时。传入间隔时间,次数
     * @param time 
     * @param sum
     */
    private void startTimer(long time, int sum) {
        Observable.interval(time, TimeUnit.MILLISECONDS)
                .take(sum)
                .map(aLong -> String.valueOf(sum - aLong))
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        disposable = d;
                    }
                    @Override
                    public void onNext(String s) {
                        //我们一般会选择将相应的时间直接设置到tv上,所以这里使用map转型
                    }
                    @Override
                    public void onError(Throwable e) {
                    }
                    @Override
                    public void onComplete() {
                        openClick();
                        setTvCode("获取验证码");
                    }
                });      
       //最后不要忘记临时中断或者使用结束时取消订阅
   public void onDestroy() {
        if (disposable != null && !disposable.isDisposed()) {
            Log.e("demo", "关闭");
            disposable.dispose();
            disposable = null;
        }
    }

其实上面的写法我们还可以更进一步简略:

 //简略写法,是不是特别简单
private void startTimer(long time,int count) {
        disposable = Observable.timer(time, TimeUnit.MILLISECONDS)
                .take(count+1)
                .map(aLong -> String.valueOf(count - aLong))
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(this::setTvCode)
                .doOnComplete(this::openClick).subscribe();
}

接下来我们看看效果:



更多Rx实用技巧及全面解析我会在以后的学习中慢慢记录,有更好的使用建议也欢迎随时评论。

目录
相关文章
|
4天前
|
C#
C# 如何使用倒计时
C# 如何使用倒计时
12 0
|
9月前
|
设计模式 测试技术
【坦克大战一】——简单实现小结
小时候对于游戏的痴迷让我对于游戏有一种心底的渴望,然而随着时间的推移阅历、经历的增加以及现在从事的编程行业似乎和游戏越来越远;在工作中对技术的要求以及未来技术的分量加上一次偶然的机会重新燃起我对游戏的渴望,不过这次的游戏并不仅仅是痴迷,而是让自己拥有一颗归零的心态在游戏编程的角度去学习那些基础的知识。
|
11月前
Flowable 定时器的各种玩法
Flowable 定时器的各种玩法
|
Java
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 下
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 下
93 0
|
Java BI Spring
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 上
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 上
395 0
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂   上
|
存储 Java
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 中
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 中
198 0
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂   中
|
JSON Java 测试技术
手撸了一个网络请求工具类,开发速度迅速提升了300%
在上一篇文章中,我们详细的介绍了RestTemplate工具类的用法,相比直接使用Apache的HttpClient进行网络传输,采用RestTemplate开发代码确实简化了很多,甚至可以做到傻瓜式操作,但是基于当前的团队人员开发习惯,我们可不可以继续基于RestTemplate再做一层封装呢?以便于操作Http网络请求,更加简单、便捷!
|
Android开发
第二十二章:动画(十七)
子动画ConcurrentAnimations中的前两个示例是单个动画。 Animation类还支持子动画,这就是标记为“Animation 3”的Button的处理程序。 它首先使用无参数构造函数创建父动画对象。
681 0
|
JavaScript Android开发
第二十二章:动画(十一)
入口动画实际编程中的一种常见类型的动画是在页面首次可见时发生的。 页面上的各种元素可以在进入最终状态之前进行简要动画处理。 这通常被称为入口动画,可能涉及: 翻译,将元素移动到最终位置。 缩放,将元素放大或缩小到最终尺寸。
843 0