使用Integer.MAX_VALUE实现首尾循环(较简单)
例子主要代码:
instantiateItem内必须抛异常,否则会出问题
public class MyPagerAdapter extends PagerAdapter {
public ArrayList<ImageView> mListViews;
private Context mContext;
public MyPagerAdapter(Context context, ArrayList<ImageView> mListViews) {
this.mListViews = mListViews;
this.mContext = context;
}
@Override
public int getCount() {
if(mListViews.size()==1){
return 1;
}
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
try{
((ViewPager) container).addView(mListViews.get(position % mListViews.size()),0);
} catch (Exception e) {
}
return mListViews.get(position % mListViews.size());
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
}
public class ViewPagerActivity extends AppCompatActivity {
private ViewPager viewpager;
private ArrayList<ImageView> mList;
private MyPagerAdapter mAdapter;
private Button mBtnAdd;
private Button mBtnDelete;
private LinearLayout viewGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_viewpager);
viewpager = findViewById(R.id.viewpager);
viewGroup = findViewById(R.id.viewGroup);
mBtnAdd = findViewById(R.id.btn_add);
mBtnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addPage();
}
});
mBtnDelete = findViewById(R.id.btn_delete);
mBtnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
delPage();
}
});
mList = new ArrayList<ImageView>();
ImageView view1 = new ImageView(this);
ImageView view2 = new ImageView(this);
ImageView view3 = new ImageView(this);
view1.setImageResource(R.drawable.bg_fragrance_type1);
view2.setImageResource(R.drawable.bg_fragrance_type2);
view3.setImageResource(R.drawable.bg_fragrance_type3);
mList.add(view1);
mList.add(view2);
mList.add(view3);
for (int i = 0; i < mList.size(); i++) {
ImageView imageView = new ImageView(this);
//设置图片的宽高 为10像素
imageView.setLayoutParams(new ViewGroup.LayoutParams(10, 10));
if (i == 0) {
//第一个为默认选中状态
imageView.setImageResource(R.drawable.ic_page_select);
} else {
imageView.setImageResource(R.drawable.ic_page_normal);
}
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
params.leftMargin = 5;
params.rightMargin = 5;
viewGroup.addView(imageView, params);
}
mAdapter = new MyPagerAdapter(this, mList);
// viewpager.setOffscreenPageLimit(mList.size());
viewpager.setAdapter(mAdapter);
viewpager.addOnPageChangeListener(onPageChangeListener);
viewpager.setCurrentItem(300);
}
public void addPage(){
ImageView view = new ImageView(this);
view.setImageResource(R.drawable.bg_fragrance_type2);
mList.add(view);
mAdapter.notifyDataSetChanged();
ImageView imageView = new ImageView(this);
imageView.setImageResource(R.drawable.ic_page_normal);
viewGroup.addView(imageView);
}
public void delPage(){
int position = viewpager.getCurrentItem();
position = position % mList.size();
if ((position < 0) || (mList.size()<=1)) {
return;
}
mList.remove(position);
mAdapter.notifyDataSetChanged();
ImageView imageView = (ImageView) viewGroup.getChildAt(position);
viewGroup.removeView(imageView);
}
private ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//当新页面选中时调用此方法,position 为新选中页面的位置索引
//在所选页面的时候,点点图片也要发生变化
setImageBackground(position % mList.size());
}
@Override
public void onPageScrollStateChanged(int state) {
}
};
/**
* 改变点点点的切换效果
*
* @param selectItem 当前选中的页面索引
*/
private void setImageBackground(int selectItem) {
for (int i = 0; i < mList.size(); i++) {
ImageView imageView = (ImageView) viewGroup.getChildAt(i);
if (i == selectItem) {
imageView.setImageResource(R.drawable.ic_page_select);
} else {
imageView.setImageResource(R.drawable.ic_page_normal);
}
}
}
}