ViewPager,實現真正的無限循環以及解決邊界切換閃屏問題

參考文章:
https://www.jianshu.com/p/99b9e4b53dc0

https://www.cnblogs.com/zhujiabin/p/7470721.html

實現無限循環方式

1.viewpager adapter中

@Override
    public int getCount() {

        return data.size() == 0 ? 0 : Integer.MAX_VALUE;
    }


@Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view = getView();
       //獲取dataindex方式
        int dataIndex = position == 0 ? data.size() - 1 : (position == data.size() + 1 ? 0 : position - 1);
        view.setTag(position);
        container.addView(view);
        return view;
    }

初始化時候 viewPager.setCurrentItem(position),設置一箇中間值,

這並不是一個真正意義上的循環,在有些需要全部刷新的adapter item中會導致性能很差.

2.推薦方式

@Override
    public int getCount() {

        return data.size() == 0 ? 0 : data.size() + 2;
    }

在首尾各加一個數據

adapter position =0,放置 data.size()數據,position==last,放置data.get(0),數據

在viewpager

  @Override
            public void onPageScrollStateChanged(int state) {
        if(state ==ViewPager.SCROLL_STATE_IDLE){
                    if (viewPager.getCurrentItem() == 0) {
                        viewPager.setCurrentItem(voicePagerAdapter.getCount()-2, false);
                    } else if (viewPager.getCurrentItem() == voicePagerAdapter.getCount() - 1) {
                        viewPager.setCurrentItem(1, false);
                    }
                }

            }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章