NineGridLayout仿照朋友圈九宫格动态图片排版-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

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

简介: 微博,空间,朋友圈的动态,都有能够根据图片数量的不同,使用不同的布局排版。 最具代表的就是1张图片,4张图片,多于9张图片时。 网上方法很多,我使用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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章