NineGridLayout仿照朋友圈九宫格动态图片排版

微博,空间,朋友圈的动态,都有能够根据图片数量的不同,使用不同的布局排版。
最具代表的就是1张图片,4张图片,多于9张图片时。
网上方法很多,我使用NineGridLayout来实现此功能。
我在此浅谈使用方法,原理性的东西暂时谈不起。

1.导入依赖库

img_fed39761bf3672b16dab723207c724b6.png

我使用的这个库也是来自网上大神的。在此留下大神的链接。
http://jaeger.itscoder.com/android/2016/03/06/nine-grid-iamge-view-libaray.html
此链接里有更详细的说明,和demo。

2.新建MyNineGridLayout继承NineGridLayout,并重写三个方法,添加构造方法。

img_c7424a571431d2ed0ec2fdd649c5443a.png
image.png

这个时候,其实我们就是新建了View控件,那么接下来的事情就很简单了,只需要像使用其他控件一样使用它就可以了。

3.首先在xml中使用该控件

img_9e048676de230efaba5746d87f5363f8.png
image.png

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>类型。
当你的图片源与前面的步骤都没有问题是,就可以正常工作了。

5.当你用到项目时,效果大体是这样。

img_59b42bbe2238da9999864e02bf1c3ae9.jpe
S70723-23435300.jpg
img_7fa4d6f7a15753b8f73b8e5deb1704f0.jpe
S70723-23440730.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值