超簡單,RxJava+ViewPager實現(xiàn)無限輪播廣告條

先簡單的聊一下ViewPager,默認它是會加載當前顯示頁和左右兩側(cè)的頁面內(nèi)容的。(所以一般使用ViewPager+Fragment的時候,盡量可以實現(xiàn)Fragment的懶加載,所以在這里給大家推薦一個框架Fragmention,反正我是看完這個代碼感覺給自己打開了一個新天地),當然,剛才說的和本節(jié)內(nèi)容一點關(guān)系也沒有。
一般每一個APP上 基本都會有這么一個廣告條。既然是廣告條了,那就得有無限輪播的功能吧。而且我看當前還有很多人再用handler+timer在指定時間去切換線程。這樣不太好吧。代碼邏輯教亂。既然學了Rx當然要使用Rx來對這個事件進行操作了。而且看起來是那么簡單。
我先貼Adapter的部分代碼

@Override
public int getCount() {
//因為是無限輪播嘛,所以在總數(shù)量這里,欺騙一下Adapter
    return Integer.MAX_VALUE;
}

同樣,因為我們改變了count,所以對應(yīng)的position也是從0- Integer.MAX_VALUE了

@Override
public Object instantiateItem(ViewGroup container, int position) {
    View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.test,container,false); 
//一般我會在這里判斷一下position,因為我一般是先加載布局,數(shù)據(jù)用的是一個空集合
//當我真正從服務(wù)器中拿到數(shù)據(jù)之后,我會更新一下Adaper,所以當是空數(shù)據(jù),就不處理了
   if(lists.size() == 0){
       return view;
    }
//當從服務(wù)器獲取到數(shù)據(jù)以后,開始循環(huán),position對size取余可以得到0-size
    position %= lists.size();
    TextView tv = (TextView) view.findViewById(R.id.tv);
    tv.setText(lists.get(position).getText());
    container.addView(view);
    return view;
}

至此,Adaper需要注意的地方就結(jié)束了。
先看一下這兩個方法

//注冊Rx事件,interval這個操作符是xx時間后做yy事
public void register(){
    subscribe = Observable.interval(2, TimeUnit.SECONDS)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<Long>() {
                @Override
                public void call(Long aLong) {
                    //每過兩秒我就展示的ViewPager當前頁的下一頁
                    mPager.setCurrentItem(mPager.getCurrentItem()+1,true);
                    //如果你們不調(diào)用unRegister,你們可以看看當程序退出之后,你們的Toast打印出來的數(shù),能打到多少
                    Toast.makeText(MainActivity.this, "aLong="+aLong, Toast.LENGTH_SHORT).show();
                }
            });}
//取消Rx事件
public void unRegister(){
    if(subscribe != null && !subscribe.isUnsubscribed()) 
       subscribe.unsubscribe();
}

我一般會在生命周期的方法里面去調(diào)用注冊和取消注冊的方法。比如onResume和onPause
同時,mPager最好在設(shè)置完ViewPager后就指定顯示再1000頁。這樣用戶進去就可以左滑了。
同時

mPager.setAdapter(adapter);
mPager.setCurrentItem(10000,false);
mPager.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
//監(jiān)聽ViewPager的觸摸事件,當用戶按下的時候取消注冊,當用戶手抬起的時候再注冊,這樣效果就完美了
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                unRegister();
                break;
            case MotionEvent.ACTION_UP:
                register();
                break; 
       }
        return false;
    }});

其實這篇文章水的毫無意義,唯一的意義也許就是向大家推薦了Fragmention,這真的非常不錯,雖然和本文一點關(guān)系都沒有。
給大家推薦兩篇文章:
RX用法大集合:
http://blog.csdn.net/theone10211024/article/details/50435325
Fragmention作者的簡書:
http://m.itdecent.cn/users/6b372d09b617/latest_articles

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,355評論 25 708
  • 2017年05月30 最后的懶加載寫的不好,推薦請叫我大蘇同學寫的Fragment懶加載博客,【Android】再...
    英勇青銅5閱讀 13,578評論 56 189
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • 作者:李旺成 時間:2016年5月3日 一、PagerAdapter介紹 先看效果圖 PagerAdapter簡介...
    diygreen閱讀 83,511評論 38 309
  • 中國的這幾年的發(fā)展速度太快了,現(xiàn)在美國大片,幾乎都有中國人的存在,而且老美也開始拼命學說中國話啦。為祖國的繁榮昌盛...
    力量女俠閱讀 383評論 0 0

友情鏈接更多精彩內(nèi)容