微博,空间,朋友圈的动态,都有能够根据图片数量的不同,使用不同的布局排版。
最具代表的就是1张图片,4张图片,多于9张图片时。
网上方法很多,我使用NineGridLayout来实现此功能。
我在此浅谈使用方法,原理性的东西暂时谈不起。
1.导入依赖库
我使用的这个库也是来自网上大神的。在此留下大神的链接。
http://jaeger.itscoder.com/android/2016/03/06/nine-grid-iamge-view-libaray.html
此链接里有更详细的说明,和demo。
2.新建MyNineGridLayout继承NineGridLayout,并重写三个方法,添加构造方法。
这个时候,其实我们就是新建了View控件,那么接下来的事情就很简单了,只需要像使用其他控件一样使用它就可以了。
3.首先在xml中使用该控件
4.然后因为是朋友圈动态中的一个控件,所以用到RecyclerView。因此MyNineGridLayout控件的初始化放在Adapter适配器中。
public class MyNineGridLayoutAdapter extends RecyclerView.Adapter<MyNineGridLayoutAdapter.ViewHolder>
{
private Context context;
private List<NineGridTestModel> modelList;
/*
* RecyclerView的三个方法
* */
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (null == context)
{
context = parent.getContext();
}
View view = LayoutInflater.from(context).inflate(R.layout.my_statu_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.layout.setIsShowAll(false);//当图片多于9张时,不完全显示。
holder.layout.setUrlList(modelList.get(position).urlList);//设置图片源
}
@Override
public int getItemCount() {
return (null == modelList) ? 0 : modelList.size();
}
/*
* 内部ViewHolder类
* */
public class ViewHolder extends RecyclerView.ViewHolder
{
NineGridLayout layout;
public ViewHolder(View itemView) {
super(itemView);
layout = (NineGridLayout) itemView.findViewById(R.id.layout_nine_grid);
}
}
public MyNineGridLayoutAdapter( List<NineGridTestModel> modelList)
{
this.modelList = modelList;
}
}
注意onBindViewHolder()中的两个方法:
holder.layout.setIsShowAll(false);当图片数量大于9张时,最后一张会显示剩余图片数,如“+3”。当参数为true时,会直接显示所以图片。
holder.layout.setUrlList(modelList.get(position).urlList);设置图片的来源,其中的urlList是List<String>类型。
当你的图片源与前面的步骤都没有问题是,就可以正常工作了。