Viewpager每个Item包含左右两个子Item滑动

Viewpager的adapter里放一张图片或者放一个view的话还好实现,最近有这样一个需求,就是viewpager的每个item有两个子item,可以无限滑动,而且当所有的子item数目为奇数时,要保证子item能首尾连接滑动,首尾连接这个功能目前还未实现,已实现的功能如下图所示:



简单贴下核心代码:

一个for循环来控制显示的子item

for (int j = 0; j < mPagerList.size(); j += 2) {
			View child = new View(this);
			child = LayoutInflater.from(MainActivity.this).inflate(
					R.layout.viewpager_item, null);
			ImageView leftThumbnail = (ImageView) child
					.findViewById(R.id.viewpager_item_image);
			TextView leftNameTV = (TextView) child
					.findViewById(R.id.viewpager_item_name);
			TextView leftOldPriceTV = (TextView) child
					.findViewById(R.id.viewpager_item_unreal_price);
			TextView leftTitleTV = (TextView) child
					.findViewById(R.id.viewpager_item_title);
			TextView leftPriceTV = (TextView) child
					.findViewById(R.id.viewpager_item_price);

			ImageView rightThumbnail = (ImageView) child
					.findViewById(R.id.viewpager_item_image2);
			TextView rightNameTV = (TextView) child
					.findViewById(R.id.viewpager_item_name2);
			TextView rightOldPriceTV = (TextView) child
					.findViewById(R.id.viewpager_item_unreal_price2);
			TextView rightTitleTV = (TextView) child
					.findViewById(R.id.viewpager_item_title2);
			TextView rightPriceTV = (TextView) child
					.findViewById(R.id.viewpager_item_price2);
			RelativeLayout rightLayout = (RelativeLayout) child
					.findViewById(R.id.studio_detail_right_layout);
			LinearLayout rightBottomLayout = (LinearLayout) child
					.findViewById(R.id.studio_detail_right_bottom_layout);

			leftNameTV.setText(mPagerList.get(j).getName());
			leftOldPriceTV.setText(mPagerList.get(j).getOldprice());
			leftOldPriceTV.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
			leftTitleTV.setText(mPagerList.get(j).getTitle());
			leftPriceTV.setText(mPagerList.get(j).getPrice());
			ImageLoader.getInstance().displayImage(
					mPagerList.get(j).getThumbnail(), leftThumbnail);//

			if (j + 1 < mPagerList.size()) {
				rightNameTV.setText(mPagerList.get(j + 1).getName());
				rightOldPriceTV.setText(mPagerList.get(j + 1).getOldprice());
				rightOldPriceTV.getPaint()
						.setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
				rightTitleTV.setText(mPagerList.get(j + 1).getTitle());
				rightPriceTV.setText(mPagerList.get(j + 1).getPrice());
				ImageLoader.getInstance().displayImage(
						mPagerList.get(j + 1).getThumbnail(), rightThumbnail);
			} else {
				rightBottomLayout.setVisibility(View.GONE);
				// rightLayout.setVisibility(View.GONE);
			}
			mListViews.add(child);

			ImageView imageView = new ImageView(this);
			imageView.setLayoutParams(new LayoutParams(10, 10));

			if (j > 0) {
				mTips[j - j / 2] = imageView;
			} else {
				mTips[j] = imageView;
			}
			if (j == 0) {
				mTips[j].setBackgroundResource(R.drawable.dot_focused);
			} else {
				mTips[j - j / 2].setBackgroundResource(R.drawable.dot_normal);
			}
			LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
					new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
							LayoutParams.WRAP_CONTENT));
			layoutParams.leftMargin = 5;
			layoutParams.rightMargin = 5;
			mGroup.addView(imageView, layoutParams);
		}

viewpager对应的PagerAdapter中的关于子item跳转传参的方法:

@Override
		public Object instantiateItem(View container, int position) {
			// TODO Auto-generated method stub
			int pos = position % views.size();
			final int index = pos + pos % mPagerList.size();
			View view = views.get(position % views.size());
			RelativeLayout leftLayout = (RelativeLayout) view
					.findViewById(R.id.studio_detail_left_layout);
			leftLayout.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					startActivity(new Intent(MainActivity.this,
							DetailActivity.class)
							.putExtra("id", mPagerList.get(index).getId())
							.putExtra("oldprice",
									mPagerList.get(index).getOldprice())
							.putExtra("price", mPagerList.get(index).getPrice())
							.putExtra("content",
									mPagerList.get(index).getContent())
							.putExtra("name", mPagerList.get(index).getName()));
				}
			});
			RelativeLayout rightLayout = (RelativeLayout) view
					.findViewById(R.id.studio_detail_right_layout);
			rightLayout.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					startActivity(new Intent(MainActivity.this,
							DetailActivity.class)
							.putExtra("seriesId",
									mPagerList.get(index + 1).getId())
							.putExtra("images",
									mPagerList.get(index + 1).getImages())
							.putExtra("oldprice",
									mPagerList.get(index + 1).getOldprice())
							.putExtra("price",
									mPagerList.get(index + 1).getPrice())
							.putExtra("content",
									mPagerList.get(index + 1).getContent())
							.putExtra("name",
									mPagerList.get(index + 1).getName())
							.putExtra("picture",
									mPagerList.get(index + 1).getPicture()));
				}
			});
			try {
				((ViewPager) container).addView(
						views.get(position % views.size()), 0);
			} catch (Exception e) {
				// handler something
			}

			return views.get(position % views.size());
		}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值