循环计时
private Subscription subscribe;//计时器对象-- 倒计时
private boolean isBiginCount=false;
private void countDown(final int times) {
isBiginCount=true;
/*倒计时功能*/
//0延迟 每隔1秒触发
//设置循环次数
//逐渐减一
//执行过程中按键为不可点击状态() -> idTvCodeAcRegister.setClickable(false)
//操作UI主要在UI线程
//循环结束调用此方法
//每隔一秒执行
//不可点击
subscribe = Observable.interval(1, TimeUnit.SECONDS) //0延迟 每隔1秒触发
.take(times + 1) //设置循环次数
.map(new Func1<Long, Long>() {
@Override
public Long call(Long aLong) {
return times - aLong;//逐渐减一
}
})
.doOnSubscribe(new Action0() {
@Override
public void call() {
}
}) //执行过程中按键为不可点击状态() -> idTvCodeAcRegister.setClickable(false)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())//操作UI主要在UI线程
.subscribe(new Observer<Long>() {
@Override
public void onCompleted() {//循环结束调用此方法
}
@Override
public void onError(Throwable e) {
MyLog.wtf("houyl_tag","visitfragment +Observable"+e.getMessage());
}
@Override
public void onNext(Long aLong) {//每隔一秒执行
//不可点击
if (tv_time == null && getActivity() == null) {
return;
}
tv_time.setText(aLong + "s");
}
});
}
private void cancelCountDown() {
if (subscribe != null && !subscribe.isUnsubscribed()) {
subscribe.unsubscribe();
tv_time.setText(0 + "s");
}
}
普通计时
private void countTime() {
currentMillers = 0;
String Minute;
String seconds;
subscribe = Observable.interval(0, 1, TimeUnit.SECONDS) //0延迟 每隔1秒触发
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())//操作UI主要在UI线程
.subscribe(new Observer<Long>() {
@Override
public void onCompleted() {//循环结束调用此方法
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Long aLong) {//
currentMillers++;
time = TimeUtils.secToHMS(currentMillers * 1000);
Logger.e("houyl time :" + time);
IPCallTime timeP = new IPCallTime(time);
if (ch != null) {
ch.setText(time);
}
RxBus.getInstance().post(timeP);
}
});
}
private void cancelCountTime() {
if (subscribe != null && !subscribe.isUnsubscribed()) {
subscribe.unsubscribe();
}
}
网友评论