Android计时器、倒计时获取验证码 OR 其它需要计数的操作
// 0秒延迟,1秒后计步器+1
Observable.interval( 0,1,TimeUnit.SECONDS)
.take( count+1 ) // 默认是从10开始的10 9 8 7 6 5 4 3 2 ## 1是不会执行的,为啥呢,因为到1的时候就已经走完了,应该去更新UI了,所以做一个+1的处理
.map(new Func1<Long, Long>() {
@Override
public Long call(Long aLong) { // 利用map转换下,把1 2 3 4 5 倒置过来变成 10 9 8 7 6 5
return count - aLong;
}
}).doOnSubscribe(new Action0() { // 当计时器开始的时候
@Override
public void call() {
button.setEnabled( false );
}
}).observeOn(AndroidSchedulers.mainThread()) // 计时器默认是跑在子线程的,所以需要切换线程
.subscribe(new Subscriber<Long>() {
@Override
public void onCompleted() { // 结束时
button.setEnabled( true );
button.setText( "重新发送" );
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Long aLong) {
button.setText( "aaa " + aLong );
}
});