NineGridView是一个仿照 钉钉-发现-圈子 实现多图展示效果的自定view
-
1.复制NineGridView类到项目中,替换TODO标签处的图片加载框架,复制attrs中定义的自定义属性
-
2.在布局中引用NineGridView,宽度应为固定值或match_parent,高度应为wrap_content
-
3.通过NineGridView.setUrls(List urls)方法填充网络图片
-
4.通过NineGridView.setCallback(NineGridView.Callback callback)方法获取图片点击回调
-
该View继承于CardView以达到实现圆角的目的(也就是通过cardCornerRadius属性设置圆角值)
-
圆角及实现效果因为不依赖于图片加载框架实现,所以可自行选用替换图片加载框架
-
图片数量为一张时,按比例缩放图片,圆角不会随着图片宽高不同而变形
-
提供自定义属性pictureMaxHeight:图片数量只有一张时该图最大显示高度
-
提供自定义属性pictureSpace:图片之间的间隔距离
-
填充网络图片:setUrls(List urls)
-
监听图片点击事件:setCallback(NineGridView.Callback callback)
-
需在NineGridView中的TODO标注里自行替换当前项目所使用的图片加载框架(推荐使用Glide或Picasso,如使用Fresco需要自行调整源码)
-
该View中的ImageView,除了图片数量为1时,采用的是按比例自适应宽高(有最大高度及宽度限制),其余情况下ImageView的宽高都是固定值。具体值由NineGridView能展示的最大宽度决定
-
该View用于RecyclerView时,为了解决单图item被回收后,重新出现在屏幕时由于高度变化造成item跳动的问题,需要牺牲部分recyclerView的复用特性。具体表现为重写适配器getItemViewType方法,判断图片数量是否为1,是则将position返回作为itemViewType(写法参考)(实则最优解应该是为单图情况专门写一个itemLayout并赋予指定itemViewType)
-
NineGridView使用Java实现,使用示例使用kotlin实现