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

先预览一下效果



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

怎么样,很简单了吧

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值