RxJava是在2016年左右火起来的,现已成为各大项目平台必用的框架,通常与MVP模式、Retrofit网络框架组合起来,为开发者提供更为强大,稳定的开发基础框架,还记得熟悉mvc开发的我第一次见到该框架时,初识繁琐,后知其妙,接下来简单做下有关倒计时功能的整理,一般在注册模块中,给新手机号发送验证码会用得到,本文仅提供倒计时的方法,相关请求验证码下发接口的功能需要大家自己去请求集成。

效果图:

手机不方便截动图,所以在后台日志打印出来,大家使用过程中,把打印出来的值setText到发送按钮上即可。

实现方法:

1.首先添加RxJava和RxAndroid依赖

2.在Activity给发送按钮设置点击事件

private Disposable disposable;
btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {disposable= Flowable.intervalRange(1, 20, 0, 1, TimeUnit.SECONDS)//从1输出到20,延时0s,间隔1s.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).doOnNext(new Consumer<Long>() {@Overridepublic void accept(Long aLong) throws Exception {Log.d("fantasychongstatus", String.valueOf(20- aLong));btn.setText((20- aLong)+ "秒后重发");btn.setClickable(false);}}).doOnComplete(new Action() {@Overridepublic void run() throws Exception {Log.d("fantasychongstatus", "计时完成");btn.setText("获取验证码");btn.setClickable(true);}}).subscribe();}
});

值得一提的是,在输出数值的过程中,我们要把发送按钮设为不可点击,否则再次点击会再次输出,造成多重输出的现象。

等输出完成后,再重新设置可点击即可。

.doOnNext(new Consumer<Long>() {@Overridepublic void accept(Long aLong) throws Exception {Log.d("fantasychongstatus", String.valueOf(20- aLong));btn.setText((20- aLong)+ "秒后重发");btn.setClickable(false);}
})
.doOnComplete(new Action() {@Overridepublic void run() throws Exception {Log.d("fantasychongstatus", "计时完成");btn.setText("获取验证码");btn.setClickable(true);}
})

3.最后在onDestroy中dispose

@Override
protected void onDestroy() {super.onDestroy();if (disposable!= null){disposable.dispose();}
}

至此全部完成,demo附上!

源码下载

Android开发丶使用RxJava来完成倒计时功能相关推荐

  1. 给 Android 开发人员的 RxJava 具体解释

    前言 我从去年開始使用 RxJava .到如今一年多了. 今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava .并且使用的场景越来越多 . 而 ...

  2. Android开发丶集成微信原生分享并于分享网页时加载网络缩略图

    微信分享也是一项很常用的功能了,以往都是用友盟或者mobShareSDK框架来实现的,这两者在微信官方的sdk基础上封装的很好,并且加入了一些很实用性的功能,不过这次因为只有微信平台的分享,而且微信登 ...

  3. Android旋转视频工具类,Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】...

    本文实例讲述了Android开发实现的IntentUtil跳转多功能工具类.分享给大家供大家参考,具体如下: 说明:此工具类是本人开发中总结下来的,还有其它的跳转亲给我留言,希望大家一起把这个工具类打 ...

  4. android实现新闻内容显示功能,Android开发实现自定义新闻加载页面功能实例

    本文实例讲述了Android开发实现自定义新闻加载页面功能.分享给大家供大家参考,具体如下: 一.概述: 1.效果演示: 2.说明:在新闻页面刚加载的时候,一般会出现五种状态 未知状态(STATE_U ...

  5. Android开发:app工程集成银联支付功能(客户端)

    Android开发:app工程集成银联支付功能(客户端) email:chentravelling@163.com 上一篇博文完成了服务器端的集成,可参考: Android开发:app工程集成银联支付 ...

  6. Android开发丶openinstall的集成和使用(推广二维码)

    在项目开发过程中,负责的推广二维码模块需要加入openinstall三方框架,该框架可以在推广二维码中搭建一层上下级关系,加上一定的积分奖励,极大地提高了用户的推广热情,并且不同于以往常规的手动填写邀 ...

  7. Android开发模式之RxJava+Retrofit+MVP(kotlin)

    一共分为两部分,第一部分是RxJava+Retrofit网络请求的使用,一部分是MVP模式结合网络请求 一,RxJava+Retrofit的使用 ①module引入 里面已经封装了OkHttp和Gso ...

  8. Android开发丶历史界面时光轴的实现

    一般在资讯类app的项目需求中,我们会经常面临着历史界面,呈现浏览记录等等,一般在每条资讯上面都会出现一个时间,当我看到时光轴这种界面,瞬间被吸引到了,觉得这么炫酷的效果,是不是用的什么开源库或者控件 ...

  9. Android开发丶基于高德地图实现定位、搜索定位、绘制圆圈自定义图标及改变圆圈半径等功能

    前一段时间接了个需求,进入一个地图界面,可以获取当前位置信息,通过输入位置信息获取位置,绘制圆圈并可以实时改变圆圈半径等功能,地图SDK我们使用的是高德地图,仔细阅读了开发文档,发现这些需求都可以通过 ...

最新文章

  1. HDU - 3416 Marriage Match IV(最大流+最短路)
  2. Java 8 Lambda表达式的函数式编程– Monads
  3. 汇编语言---输出“welcome to you!”
  4. 20190827:(leetcode习题)合并两个有序链表
  5. sql server 2000 更改账户默认数据库
  6. qqzoneQQ空间漏洞扫描器的设计attilax总结
  7. 均方根误差RMSE 均方根值(RMS)+ 均方根误差(RMSE)+标准差(Standard Deviation)
  8. RTN实时音视频传输网络
  9. Tomcat 启动报does not exist or is not a readable directory错误,修改配置文件
  10. java outofmemory怎么解决_java.lang.OutOfMemoryError异常解决方法
  11. 峨眉山徒步休闲三日游攻略内附详细时间
  12. APM2.8 Rover 自动巡航车设计(硬件连接)
  13. 方波通过RC滤波器波形-Matlab仿真
  14. redies 须知小结
  15. 【中国数据创新琅琊榜】数联易康医疗大数据平台,创新健康医疗产业变革的推动者和见证者!
  16. 如何实现数据库的读写分离
  17. 基于大数据的音乐数据中心平台(附:源码 课件 项目部署文档)
  18. 使用nginx实现请求转发的功能
  19. IBM欧洲裁员一万人、Salesforce 考虑收购 Slack​、杰夫·贝佐斯如何做决定等|Decode the Week...
  20. 头皮发麻之win10宽带拨号错误797

热门文章

  1. mysql查询sex为男的记录总数_mysql 查询 45 道题
  2. CPS-一种新型电商营销方式
  3. 51单片机+ds1302+lcd1602简易电子时钟(带闹钟功能)
  4. 新手学自定义View系列(一)Demo
  5. “钱三篇”后续之年金终值
  6. 如何区分数据结构中的线性结构与非线性结构?
  7. centos卸载docker
  8. 回归初心——读《Deep Big Simple Neural Nets Excel on Hand-written Digit Recognition》
  9. 微分算法 非侵入式负荷识别_基于用户用电行为和粒子群算法的非侵入式负荷识别方法...
  10. 电子邮箱排名,更安全稳定的电子邮箱—TOM