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实用技巧及全面解析我会在以后的学习中慢慢记录,有更好的使用建议也欢迎随时评论。

目录
相关文章
|
2月前
|
Java
让星星⭐月亮告诉你,自定义定时器和Java自带原生定时器
定时器是一种可以设置多个具有不同执行时间和间隔的任务的工具。本文介绍了定时器的基本概念、如何自定义实现一个定时器,以及Java原生定时器的使用方法,包括定义定时任务接口、实现任务、定义任务处理线程和使用Java的`Timer`与`TimerTask`类来管理和执行定时任务。
53 3
|
7月前
|
API 开发者
通过使用Phaser游戏框架,我成功地完成了“跳跃之旅”项目的开发
【5月更文挑战第14天】在Phaser框架下开发2D平台跳跃游戏&quot;跳跃之旅&quot;时,面临性能优化、碰撞检测与响应、图形和动画等挑战。通过使用Phaser的性能分析工具和资源优化策略提升帧率,利用内置物理引擎实现精确碰撞,编写自定义碰撞响应函数,以及借助图形绘制和动画系统创建精美动画,成功解决了这些问题。此过程提升了开发者的技术水平和对游戏开发的理解。
73 4
|
存储 Java
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 中
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 中
289 0
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂   中
|
Java BI Spring
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 上
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 上
535 0
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂   上
|
Java
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 下
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂 下
142 0
|
iOS开发
IOS动画
IOS动画
84 0
|
JavaScript Android开发
第二十二章:动画(二十)
实现贝塞尔动画一些图形系统实现动画,该动画沿着贝塞尔曲线移动视觉对象,甚至(可选地)旋转视觉对象,使其保持与曲线相切。Bezier曲线以法国工程师兼数学家PierreBézier的名字命名,他在雷诺工作期间开发了用于汽车车身交互式计算机辅助设计的曲线。
652 0
|
JavaScript Android开发
第二十二章:动画(十五)
深入动画 在第一次遇到时,完整的Xamarin.Forms动画系统可能会有点混乱。 让我们从可用于定义动画的三个公共类的全局视图开始。整理课程除了Easing类之外,Xamarin.Forms动画系统还包含三个公共类。
849 0
|
JavaScript Android开发
第二十二章:动画(十四)
你自己的等待动画在本章的下一节中,您将看到Xamarin.Forms实现的基础动画基础结构。这些底层方法允许您定义自己的动画函数,这些函数返回Task对象,并且可以与await一起使用。在第20章“异步和文件I / O”中,您了解了如何使用静态Task.Run方法创建执行的辅助线程,以执行像Mandelbrot计算这样的密集后台作业。
741 0
|
JavaScript Android开发 iOS开发
第二十二章:动画(十二)
永远的动画在入口动画的相反极端是永远的动画。 应用程序可以实现“永远”或至少在程序结束之前进行的动画。 这种动画的唯一目的通常是展示动画系统的功能,但最好是以令人愉快或有趣的方式。第一个示例称为FadingTextAnimation,并使用FadeTo淡入和淡出两个Label元素。
667 0