android

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

2017-10-16  本文已影响149人  Little_Moon

其实世上本没有桶排这个名词,只是百度、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。

最后结果如下:

上一篇下一篇

猜你喜欢

热点阅读