CountDownTimer实现
Android提供一个CountdownTimer的类,采用Handler的方式实现,实现倒数计时的功能。
//第一个参数表示总时间,第二个参数表示间隔时间。单位ms,意思就是每隔100ms会回调一次方法onTick
new CountDownTimer(1000, 100) {
@Override
public void onTick(long l) {
Log.i(TAG, "onTick: " + l);
}
@Override
public void onFinish() {
Log.i(TAG, "onFinish: ");
}
}.start();
RxJava实现
RxJava操作符
本例涉及的RxJava操作符:
- Interval — 创建一个定时发射整数序列的Observable
RxJava实现
public void sendVerificationCode(View view) {
final Button button = (Button) this.findViewById(R.id.send_verification_code);
final long count = 10;
Observable.interval(0, 1, TimeUnit.SECONDS)
.take(count+1)
.map(new Function<Long, Long>() {
@Override
public Long apply(Long aLong) throws Exception {
return count - aLong;
}
})
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(new Consumer<Disposable>() { //初始状态
@Override
public void accept(Disposable disposable) throws Exception {
button.setBackgroundColor(Color.parseColor("#A5A5A5"));
button.setEnabled(false);
}
})
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long value) {
Log.i(TAG, "onNext: " + value);
button.setText("剩余 " + value + " 秒");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onComplete() {
Log.i(TAG, "onComplete: ");
button.setEnabled(true);
button.setBackgroundColor(Color.parseColor("#3BC1FF"));
button.setText("发送验证码");
}
});
}




