RxJava2和Handler两种方法实现轮播图

来源:互联网 发布:网络订餐平台监管 编辑:程序博客网 时间:2024/05/25 08:12

传统方式Handler

思路:开启一个子线程,里面是切换viewpager页面的操作。然后由handler延迟2秒把第一个子线程扔进队列中。然而在这个子线程在执行的时候,这个子线程又需要延迟两秒后被扔进队列。上代码就清晰了。

final Handler handler = new Handler();Runnable runnable = new Runnable() {    @Override    public void run() {        int pos = mVpEmoji.getCurrentItem();        if (pos == 5) {            mVpEmoji.setCurrentItem(0);        } else {            mVpEmoji.setCurrentItem(pos + 1);        }        handler.postDelayed(this, 2000);    }};handler.postDelayed(runnable, 2000);

如果你在某一时刻想终止它,只需要handler.removeCallbacks(runnable)就可以了。


然后用rxjava2实现呢?令人期待啊。

Observable.interval(2, TimeUnit.SECONDS)        .observeOn(AndroidSchedulers.mainThread())        .subscribeOn(AndroidSchedulers.mainThread())        .subscribe(new Action1<Long>() {            @Override            public void call(Long aLong) {                mVpEmoji.setCurrentItem((int) (aLong % 6));            }        });
仅仅用了一个interval的函数。他会无线延迟两秒发送值。这个值是这样的0 1 2 3 。。。所以只需要加一个%就可以轻松搞定了。优雅!

阅读全文
0 0
原创粉丝点击