Back to project page InfiniteViewPager.
The source code is released under:
Copyright (c) 2012 Antony Tran Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Softwa...
If you think the Android project InfiniteViewPager listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.antonyt.infiniteviewpager; //from w ww . j a v a2s . co m import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; /** * A {@link ViewPager} that allows pseudo-infinite paging with a wrap-around effect. Should be used with an {@link * InfinitePagerAdapter}. */ public class InfiniteViewPager extends ViewPager { public InfiniteViewPager(Context context) { super(context); } public InfiniteViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void setAdapter(PagerAdapter adapter) { super.setAdapter(adapter); // offset first element so that we can scroll to the left setCurrentItem(0); } @Override public void setCurrentItem(int item) { // offset the current item to ensure there is space to scroll setCurrentItem(item, false); } @Override public void setCurrentItem(int item, boolean smoothScroll) { item = getOffsetAmount() + (item % getAdapter().getCount()); super.setCurrentItem(item, smoothScroll); } @Override public int getCurrentItem() { int position = super.getCurrentItem(); if (getAdapter() instanceof InfinitePagerAdapter) { InfinitePagerAdapter infAdapter = (InfinitePagerAdapter) getAdapter(); // Return the actual item position in the data backing InfinitePagerAdapter return (position % infAdapter.getRealCount()); } else { return super.getCurrentItem(); } } private int getOffsetAmount() { if (getAdapter() instanceof InfinitePagerAdapter) { InfinitePagerAdapter infAdapter = (InfinitePagerAdapter) getAdapter(); // allow for 100 back cycles from the beginning // should be enough to create an illusion of infinity // warning: scrolling to very high values (1,000,000+) results in // strange drawing behaviour return infAdapter.getRealCount() * 100; } else { return 0; } } }