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());
}