图片轮播之无限轮播

用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);




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值