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

xiaoxiao2021-02-28  96

先预览一下效果

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

怎么样,很简单了吧

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

转载请注明原文地址: https://www.6miu.com/read-52707.html

最新回复(0)