美文网首页android
android图片列表桶排(类似百度图片排序)

android图片列表桶排(类似百度图片排序)

作者: Little_Moon | 来源:发表于2017-10-16 12:23 被阅读149次

    其实世上本没有桶排这个名词,只是百度、Pinterest等用了,所以就有了。观察百度图片,可以得出桶排的一个描述:所有图片保持基本的比例来显示,并且每一行的高度一样,所有行的高度基本一致。

    然而在手机上,这三个约束条件是不能同时满足的,因为要保证所有行的高度一致,每一行的图片数量可能会很多,而手机宽度太小,每一行多于3张图片,基本图片就太小了,看不清了,所以在手机上,只能满足前两个条件:所有图片保持基本的比例,每一行的高度相同。

    其实实现很简单,利用RecyclerView和GridLayoutManager,GridLayoutManager.setSpanSizeLookup方法,来实现每一个view的宽度。所以我们要做的工作,就是来计算每一个item的span值。

    首先定义一个item的数据类型:

    private classInfo {

    //图片路径

    public String path;

    public int width;

    public int height;

    //span值

    public int spanCount;

    //宽高比

    public float wh;

    //显示的高度

    public int showHeight;

    }

    我们要做的工作,就是根据图片的宽高,来计算spanCount和showHeight,计算的基本流程如下:

    1.遍历当前列表,计算宽高比

    2.遍历当前列表,查看当前的item是否可以插入当前组中,如果能插入,则继续,如果不能插入,则把这一组当作一行,计算其span和高度

    3.重复2,直到最后一个元素。

    代码如下:

    canInsertMore函数也很简单,就是计算当前group内的最小span是否超过最小值,或者个数是否超过设定值,或者高度是否太小,如果都不满足,则可以插入,否则可以继续插。

    reTrimGroup函数更简单,原理是根据每个item的wh的比例,计算当前span的值,然后根据宽高比,得到showHeight。

    最后结果如下:

    相关文章

      网友评论

        本文标题:android图片列表桶排(类似百度图片排序)

        本文链接:https://www.haomeiwen.com/subject/lawhjttx.html