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

RxJava2和Handler两种方法实现轮播图_第1张图片

传统方式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() {
            @Override
            public void call(Long aLong) {
                mVpEmoji.setCurrentItem((int) (aLong % 6));
            }
        });
仅仅用了一个interval的函数。他会无线延迟两秒发送值。这个值是这样的0 1 2 3 。。。所以只需要加一个%就可以轻松搞定了。优雅!

你可能感兴趣的:(Android)