起因是这样的,使用recycleView加载items的时候需要封面需要时gif或者是img。
这个时候出现了img的item是圆角的但是gif不是圆角。
解决办法:
在xml文件中使用
fresco:roundWithOverlayColor="@color/you_color_id"
"you_color_id"是指你的背景色,这样也可以实现圆角、圆圈效果
解释:
fresco不作设置时是默认使用BITMAP_ONLY模式限制:
所以动画不支持圆角;
官方文档:
可使用以下两种方式:
- 默认使用一个 shader 绘制圆角,但是仅仅占位图和所要显示的图有圆角效果。失败示意图和重下载示意图无圆角效果,且这种圆角方式不支持动画。
- 叠加一个
solid color
来绘制圆角。但是背景需要固定成指定的颜色。 在XML中指定roundWithOverlayColor
, 或者通过调用setOverlayColor
来完成此设定。
额外出现的一个问题: recycleView item的底部没有对齐
展示item的时候,大概要求是这样,一行三个,item之间的间距是3dp,底部是3dp。
当时就使用了recycleView+Fresco这种形式,Fresco里面有一个属性fresco:viewAspectRatio="1",意思就是宽高比为一;
间距的代码如下:
private static class A extends RecyclerView.ItemDecoration {
private int gap;
A(Context context) {
this.gap = DisplayUtil.dip2px(context, 1f);
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view);
if (position < 0) {
return;
}
int mode = position % 3;
switch (mode) {
case 0:
outRect.right = gap * 2;
break;
case 1:
outRect.left = gap;
outRect.right = gap;
break;
case 2:
outRect.left = gap * 2;
break;
}
outRect.bottom = gap * 3;
}
}
产生的原因是这样的,每一个item所对应的outRect的总和没有一致。
也就是case0的outRect.right 、case1 的 outRect.left+outRect.right和case2的outRect.left的值不相同
又因为fresco:viewAspectRatio=1,导致item显示的时候底部不一致。