Viewpager无限轮循

2019-08-07  本文已影响0人  duoduo7628

方法有两种

    private void initData() {

        mList = new ArrayList<>();
        mList.add(new MyData(5));
        for (int i = 0; i < 5; i++) {

            MyData myData = new MyData();
            myData.setIndex(i+1);
            mList.add(myData);
        }
        mList.add(new MyData(1));
    }

    @Override
    public void onPageScrollStateChanged(int state) {

        if(state == ViewPager.SCROLL_STATE_SETTLING){
            //结束

            Log.e(TAG, "onPageScrollStateChanged: state = ViewPager.SCROLL_STATE_SETTLING ");


        }else if(state == ViewPager.SCROLL_STATE_DRAGGING){

            //滑动中
            Log.e(TAG, "onPageScrollStateChanged: state = ViewPager.SCROLL_STATE_DRAGGING" );

        }else if(state == ViewPager.SCROLL_STATE_IDLE){
            //静止状态
            Log.e(TAG, "onPageScrollStateChanged: state = ViewPager.SCROLL_STATE_IDLE" );

            //有的博文会监听positionOffset = 0,测试发现这里监听最稳定
            if(mViewPager.getCurrentItem() == 0){

                mViewPager.setCurrentItem(mList.size() - 2,false);
            }else if(mViewPager.getCurrentItem() == mList.size() -1){

                mViewPager.setCurrentItem(1,false);
            }
        }
    }

缺点:不适用于一屏显示多个item 并且有缩放、渐变等动画的item。

package com.noah.testviewpager;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

import java.util.List;

public class MyMaxPageAdapter extends FragmentStatePagerAdapter {


    private List<MyData> mList;

    public MyMaxPageAdapter(FragmentManager fm , List<MyData> mList) {
        super(fm);
        this.mList = mList;

    }

    @Override
    public Fragment getItem(int i) {
        return MyFragment.getInstance(mList.get(i % mList.size()));
    }

    @Override
    public int getCount() {
        return mList != null && mList.size() > 0 ? Integer.MAX_VALUE : 0;
    }
}

直接设置adapter

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initData();
        mViewPager = findViewById(R.id.viewpager);
        MyMaxPageAdapter myMaxPageAdapter = new MyMaxPageAdapter(getSupportFragmentManager(),mList);
        mViewPager.setAdapter(myMaxPageAdapter);
        mViewPager.setCurrentItem(mList != null ? mList.size() * 50 : 0,false);

    }

优点:这个再有动画的时候,无限循环也可以正常显示。

上一篇 下一篇

猜你喜欢

热点阅读