您的位置:首页 > 移动开发

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

2017-07-11 09:37 134 查看
先预览一下效果









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


怎么样,很简单了吧

有什么问题可以在评论留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息