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
目录
相关文章
|
6月前
自适应可爱卡通小人404页面模板
自适应可爱卡通小人404页面模板
69 12
自适应可爱卡通小人404页面模板
|
3月前
|
前端开发 程序员
HTML+CSS+JavaScript制作动态七夕表白网页(含音乐+自定义文字)
一年一度的520情人节/七夕情人节/女朋友生日/程序员表白,是不是要给女朋友或者正在追求的妹子一点小惊喜呢,今天这篇博客就分享下前端代码如何实现HTML+CSS+JavaScript制作七夕表白网页(含音乐+自定义文字)。赶紧学会了,来制作属于我们程序员的浪漫吧!
69 0
HTML+CSS+JavaScript制作动态七夕表白网页(含音乐+自定义文字)
|
3月前
404错误页面简约清新源码 非常好看
404错误页面简约清新源码 非常好看,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
21 0
404错误页面简约清新源码 非常好看
|
6月前
宽屏好看的个人引导页源码
宽屏好看的个人引导页源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果
65 5
宽屏好看的个人引导页源码
|
6月前
只用一个背景图片实现九宫格抽奖(uniapp纯代码)
只用一个背景图片实现九宫格抽奖(uniapp纯代码)
71 0
|
前端开发
前端代码分享——霓虹灯图标菜单特效(内含源码)
前端代码分享——霓虹灯图标菜单特效(内含源码)
|
计算机视觉 Python
【每周一坑】生成九宫格图片
非常简单的功能,但在开发中很常见,很多网页/应用里缩略图都是对图片进行缩放+切割得到的。
|
小程序 开发者
如何实现一个好看的金币效果
如图,是我最新上线的游戏【彩虹星球大冒险】中的金币拾取效果,打金币作为这个游戏中的一个非常重要的体验,把金币拾取效果做的好看就显得尤为重要。今天就跟大家分享一个,如何实现一个这样好看的金币拾取效果。 观察一下上面的动图,金币从出现到消失总共是分为两个过程的。 金币从爆炸的物体中向上弹出,并进行旋转下落 玩家碰到金币后,金币放大旋转然后飞到屏幕的左上角记录金币的位置后消失 接下来我们以一个具体的实例,来逐步的实现整个金币效果。
215 0
如何实现一个好看的金币效果
|
JavaScript 程序员 开发者
跑马灯效果制作-上|学习笔记
快速学习跑马灯效果制作-上
跑马灯效果制作-上|学习笔记
|
JavaScript 开发者
跑马灯效果制作-下|学习笔记
快速学习跑马灯效果制作-下
105 0
跑马灯效果制作-下|学习笔记