Search code examples
androidandroid-viewpager

How to auto slide android View Pager


Can a View Pager be made to auto slide or autopage. I have my viewpager set up to use the adapter like the below and it works fine:-

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.gridslide);
ImagePagerAdapter mAdapter = new ImagePagerAdapter(
        getSupportFragmentManager(),4);
ViewPager mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}

And the adapter is like below:-

public static class ImagePagerAdapter extends FragmentStatePagerAdapter {
private final int mSize;

public ImagePagerAdapter(FragmentManager fm, int size) {
    super(fm);
    mSize = size;
}

@Override
public int getCount() {
    return mSize;
}
@Override
public Fragment getItem(int position) {
    Log.v(TAG,"position="+position);
    return TheFragment.newInstance(position);
}}

However I would want to know how to make these fragments autoslide in a viewpager.


Solution

  • Setting smoothScroll = true in setCurrentItem(int item, boolean smoothScroll) does not always have the smooth scroll effect. Suppose if you have less than 5 pages in you viewpager, you will hardly notice the smooth scroll.

    In this scenario, the hard way to do it is to put it in a for loop

    //This will scroll page-by-page so that you can view scroll happening
    for (int i = 0; i < mAdapter.getCount()-1; i++)
        mPager.setCurrentItem(i, true);
    

    If some one needs more slower scroll, they can use postDelayed() like this...

    static int i=0;
    private final Handler handler = new Handler();
    somefunction()
    {
        handle.post(ViewPagerVisibleScroll);
    }
    
        Runnable ViewPagerVisibleScroll= new Runnable() {
                    @Override
                    public void run() {
                        if(i <= mAdapter.getCount()-1)
                        {
                            mPager.setCurrentItem(i, true);
                            handle.postDelayed(TopChartAnimation, 100);
                            i++;
                        }
                    }
                };
    

    Sleep is always NOT recommended : If some one needs more slower scroll, they may use a sleep in this for loop...

    @Override
    public void onClick(View v) {
    Runnable runnable = new Runnable() {
                    @Override
                    public void run() {
                        for (int i = 0; i < mAdapter.getCount()-1; i++) {
                            final int value = i;
                            try {
                                Thread.sleep(50);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    mPager.setCurrentItem(value, true);
                                }
                            });
                        }
                    }
                };
                new Thread(runnable).start();
    
            }