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);
                    }
                }

            }

你可能感兴趣的:(控件类)