先预览一下效果
图中 图3、图4 是一个item,因为图片太长,屏幕显示放不下
从上面几张图片可以看得出来,大致分为2种情况:单张图和多张图(单张图是imageView宽高包裹,多张图时imageView宽高固定)
有的同学心想,这有什么难的,直接多写几个itemView,然后getItemViewType判断一下不就行了吗?
其实,图片有可能是1张、2张、3张。。。。最多9张,你是想写9个布局文件吗?
看一下我是怎么实现的吧
不是最多9张图吗,平均分配也就是每行3张图,写了3个空的LinearLayout,线性方向是水平方向
再来看一下Adapter
int bitmapNum = 0;//图片的数量
if(listBeen.get(position).bitmaps != null){ bitmapNum = listBeen.get(position).bitmaps.size(); } if(bitmapNum == 0){ viewHolder.layout1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,20)); }else if(bitmapNum == 1){ final ImageView imageView = new ImageView(context); imageView.setAdjustViewBounds(true); imageView.setScaleType(ImageView.ScaleType.CENTER); viewHolder.layout1.addView(imageView); LinearLayout.LayoutParams imageViewParams = (LinearLayout.LayoutParams) imageView.getLayoutParams(); imageViewParams.width = LinearLayout.LayoutParams.WRAP_CONTENT; imageViewParams.height = LinearLayout.LayoutParams.WRAP_CONTENT; imageView.setLayoutParams(imageViewParams); Glide.with(context).load(listBeen.get(position).bitmaps.get(0)).into(imageView); viewHolder.layout1.invalidate(); }else if(bitmapNum > 1){ for(int i = 0 ; i < bitmapNum ; i ++){ ImageView imageView = new ImageView(context); if(i <= 2){ viewHolder.layout1.addView(imageView); }else if(i > 2 && i <= 5){ viewHolder.layout2.addView(imageView); }else if(i > 5 && i <= 8){ viewHolder.layout3.addView(imageView); } LinearLayout.LayoutParams imageViewParams = (LinearLayout.LayoutParams) imageView.getLayoutParams(); imageViewParams.width = BaseApplication.WINDOW_WIDTH / 100 * 25; imageViewParams.height = BaseApplication.WINDOW_WIDTH / 100 * 25; imageViewParams.rightMargin = 15; imageViewParams.topMargin = 15; imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams(imageViewParams); Glide.with(context).load(listBeen.get(position).bitmaps.get(i)).into(imageView); viewHolder.layout1.invalidate(); viewHolder.layout2.invalidate(); viewHolder.layout3.invalidate(); } }
怎么样,很简单了吧
有什么问题可以在评论留言