比如显示5张图片,在头部加一张跟第5张相同的图片,在尾部加一张跟第一张相同的图片,这样第1张往右拉的过程中,左边逐渐出现加入在头部的图片(跟出现第5张效果一样)
同理,第5张往左拉的时候,右边逐渐出现加入在尾部的图片(跟出现第一张效果一样)
前面保证了在拉的过程中,头尾部的拉动效果,但是拉完后,要实现还可以循环拉,就需要在显示完附加在头部的图片后,人为设置当前页面为第五张图片,同理,显示完附加在尾部的图片后,人为设置当前页面为第一张图片,并且做这两个设置的时候,要取消滑动动画,否则会出现两张相同图片逐渐切换的效果
package com.qf.zhouyi.unlimitedviewpager; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity implements OnPageChangeListener { private List<ImageView> imageviewList; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mViewPager = (ViewPager) findViewById(R.id.viewpager); prepareData(); ViewPagerAdapter adapter = new ViewPagerAdapter(); mViewPager.setAdapter(adapter); mViewPager.setOnPageChangeListener(this); mViewPager.setCurrentItem(1); } private void prepareData() { imageviewList = new ArrayList<ImageView>(); int[] imageResIDs = getImageResIDs(); ImageView iv; for (int i = 0; i < imageResIDs.length; i++) { iv = new ImageView(this); iv.setBackgroundResource(imageResIDs[i]); imageviewList.add(iv); } } private int[] getImageResIDs() { return new int[] { R.drawable.app_start_5, R.drawable.app_start_1, R.drawable.app_start_2, R.drawable.app_start_3, R.drawable.app_start_4, R.drawable.app_start_5, R.drawable.app_start_1, }; } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int positon) { if(imageviewList.size()>1){ if (positon < 1) { positon = 5; //取消滑动动画 mViewPager.setCurrentItem(5, false); } else if (positon > 5) { positon = 1; //取消滑动动画 mViewPager.setCurrentItem(1, false); } } } class ViewPagerAdapter extends PagerAdapter { @Override public int getCount() { return imageviewList.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(imageviewList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(imageviewList.get(position)); return imageviewList.get(position); } } }