高仿APP——元贝驾考(三)ListView多ItemView

来源:互联网 发布:iina for mac下载 编辑:程序博客网 时间:2024/06/16 16:01

先预览一下效果



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

怎么样,很简单了吧

有什么问题可以在评论留言



原创粉丝点击