图片轮播之无限轮播
发布日期:2021-06-30 18:38:27 浏览次数:2 分类:技术文章

本文共 2275 字,大约阅读时间需要 7 分钟。

用ViewPager来实现轮播,会考虑到无限轮播和左右循环,需要做到以下5步:
//1.把图片的总数改为整数的最大值,做为虚假的图片数量
//2.在用到position的地方进行%运算,这样可以保证得到的position的不会数组越界
//3.设置虚假图片位置的起点为整数最大值的中间
//4.算出真正图片位置与起点的偏差值
//5.整数最大值的中间-真正图片位置与起点的偏差值
/*================================= 适配器的设置 =================================*/	class PictureAdapter extends PagerAdapter {		@Override		public int getCount() {			// TODO			if (mData != null) {				//1.把图片的总数改为整数的最大值,做为虚假的图片数量				return Integer.MAX_VALUE;			}			return 0;		}		@Override		public boolean isViewFromObject(View view, Object object) {			// TODO			return view == object;		}		@Override		public Object instantiateItem(ViewGroup container, int position) {			// TODO			//2.在用到position的地方进行%运算,这样可以保证得到的position的不会数组越界			//position(真正的图片位置) = position(虚假的图片位置) % mData.size()(图片数量);			position = position % mData.size();			ImageView iv = new ImageView(UIUtils.getContext());			iv.setImageResource(R.drawable.ic_default);			String url = URLS.IMAGEBASEURL + mData.get(position);			BitmapHelper.display(iv, url);			container.addView(iv);			return iv;		}		@Override		public void destroyItem(ViewGroup container, int position, Object object) {			// TODO			container.removeView((View) object);		}	}	/*================================= viewPager的触摸事件设置 =================================*/	// 设置viewpager的滑动事件	mViewPager.setOnPageChangeListener(new OnPageChangeListener() {		@Override		public void onPageSelected(int position) {			// TODO			//2.在用到position的地方进行%运算,这样可以保证得到的position的不会数组越界			//position(真正的图片位置) = position(虚假的图片位置) % mData.size()(图片数量);			position = position % mData.size();			for (int i = 0; i < mData.size(); i++) {				View indicatorView = mContainer.getChildAt(i);				indicatorView						.setBackgroundResource(R.drawable.indicator_normal);				if (i == position) {					indicatorView							.setBackgroundResource(R.drawable.indicator_selected);				}			}		}		@Override		public void onPageScrolled(int position, float positionOffset,				int positionOffsetPixels) {			// TODO		}		@Override		public void onPageScrollStateChanged(int state) {			// TODO		}	});	//4.算出真正图片位置与起点的偏差值	int diff = Integer.MAX_VALUE / 2 % mData.size();	//3.设置虚假图片位置的起点为整数最大值的中间,这样可以使得轮播一开始从可以划到左边的效果,但是可能出现获取到的真正图片位置不是从0开始的现象,所以要算出真正图片位置与起点的偏差值	mViewPager.setCurrentItem(Integer.MAX_VALUE / 2 - diff);

转载地址:https://linqiarui.blog.csdn.net/article/details/50764633 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:图片轮播之自动轮播
下一篇:一键锁屏和清除数据

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月24日 00时09分12秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章