Fresco gif不能使用圆圈或圆角的处理方式

起因是这样的,使用recycleView加载items的时候需要封面需要时gif或者是img。

这个时候出现了img的item是圆角的但是gif不是圆角。

解决办法:

在xml文件中使用

fresco:roundWithOverlayColor="@color/you_color_id"

"you_color_id"是指你的背景色,这样也可以实现圆角、圆圈效果

解释:

fresco不作设置时是默认使用BITMAP_ONLY模式限制:

所以动画不支持圆角;

官方文档:

可使用以下两种方式:

  1. 默认使用一个 shader 绘制圆角,但是仅仅占位图和所要显示的图有圆角效果。失败示意图和重下载示意图无圆角效果,且这种圆角方式不支持动画。
  2. 叠加一个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显示的时候底部不一致。

 

你可能感兴趣的:(安卓)