先预览一下效果

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


图中 图3、图4 是一个item,因为图片太长,屏幕显示放不下


从上面几张图片可以看得出来,大致分为2种情况:单张图和多张图(单张图是imageView宽高包裹,多张图时imageView宽高固定)


有的同学心想,这有什么难的,直接多写几个itemView,然后getItemViewType判断一下不就行了吗?

其实,图片有可能是1张、2张、3张。。。。最多9张,你是想写9个布局文件吗?


看一下我是怎么实现的吧


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

不是最多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();
    }
}

怎么样,很简单了吧

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



相关文章:

  • 2021-08-08
  • 2022-12-23
  • 2021-08-27
  • 2022-12-23
  • 2022-12-23
  • 2021-05-24
  • 2021-09-28
猜你喜欢
  • 2021-12-20
  • 2021-07-07
  • 2022-01-20
  • 2022-01-20
  • 2021-10-02
  • 2022-12-23
  • 2022-01-17
相关资源
相似解决方案