開源庫Banner如何實現無限輪播

記得最初使用ViewPager實現無限輪播大體是這樣的.前端

class BannerPagerAdapter extends PagerAdapter {
        List<View> list;
        @Override
        public int getCount() {           
            return Integer.MAX_VALUE;
        }
        @Override
        public Object instantiateItem(ViewGroup container, final int position) {
            int realPosition = position%list.size();
            return list.get(realPosition);
        }
    }

在使用了開源庫Banner後,感受這個庫處理無限輪播,寫的很是好.git

這個庫能夠左右無限滑動,也能夠自動左右無限輪播.github

首先先了解下,其大體原理.ide

在數據的先後兩端各添加一條數據.前端添加的是最後一天數據,尾端添加的是第一條數據.如圖:
圖片描述動畫

當從C滑動到D時,在ViewPager.OnPageChangeListener#onPageScrollStateChanged()中作監聽並快速切換到A;
當從A滑動到E時,在ViewPager.OnPageChangeListener#onPageScrollStateChanged()中作監聽並快速切換到C;
這裏切換使用viewPager.setCurrentItem(int,boolean);第二個參數爲false,表示不使用動畫,直接快速切換,形成一種無限輪播的假象.spa

而後在ViewPager.OnPageChangeListener中作監聽處理並快速切換.code

//當前頁面索引
int currentIndex  = 1;
//數據源的實際大小
int pageCount;
 private ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            currentIndex = position;
        }

        @Override
        public void onPageScrollStateChanged(int state) {
                //在這裏作快速切換,當你滑動到首位,要快速切換到尾端
               if (currentIndex==0){
                   viewPager.setCurrentItem(pageCount,false);
               }
               //當你滑動到尾端,要快速切換到首位
               if (currentIndex==pageCount+1){
                   viewPager.setCurrentItem(1,false);
               }       
        }
    };
相關文章
相關標籤/搜索