【安卓】Fresco动态设置圆角后图片颜色渗出的问题

问题场景:

  我在一个工具类中加载图片,动态设置了圆角和缩放类型(fitCenter),在加载某些图片的时候,导致图片颜色渗出.

  开始以为是Fresco默认背景的问题,看了下官方文档中的解释,发现并不尽然..

图片文件:

【安卓】Fresco动态设置圆角后图片颜色渗出的问题_第1张图片

 

修复前:

【安卓】Fresco动态设置圆角后图片颜色渗出的问题_第2张图片

其中,红框框是图片控件大概的大小,右边的黑边就是图片渗出的颜色.

修复后:

【安卓】Fresco动态设置圆角后图片颜色渗出的问题_第3张图片

官方的解释:

【安卓】Fresco动态设置圆角后图片颜色渗出的问题_第4张图片

【安卓】Fresco动态设置圆角后图片颜色渗出的问题_第5张图片

一定要清楚 RoundingMethod.OVERLAY_COLOR 和 RoundingMethod.BITMAP_ONLY 这两种模式的区别!!!

 

解决方式(二选一即可):

  1.代码中设置:

//重设SimpleDraweeView图片缩放类型
GenericDraweeHierarchyBuilder genericDraweeHierarchyBuilder = new GenericDraweeHierarchyBuilder(pic.getContext().getResources());
//修复设置圆角后图片颜色渗出的问题(setOverlay():设置背景色)
genericDraweeHierarchyBuilder.setOverlay(pic.getContext().getResources().getDrawable(R.drawable.transparent_back));
GenericDraweeHierarchy hierarchy = genericDraweeHierarchyBuilder.build();

//设置圆角值(单位:PX)
RoundingParams roundingParams = new RoundingParams();
roundingParams.setCornersRadius(PX值);
hierarchy.setRoundingParams(roundingParams);

transparent_back.xml 



    
    

PS:请不要用这种方式↓ 

//重设SimpleDraweeView相关属性
GenericDraweeHierarchy hierarchy = pic.getHierarchy();

//设置圆角值
RoundingParams roundingParams = new RoundingParams();
//修复设置圆角后图片颜色渗出的问题
//参数为要设置的颜色,我这里用的直接是透明色
//roundingParams.setOverlayColor(上下文.getResources().getColor(R.color.transparent));         
roundingParams.setOverlayColor(pic.getContext().getResources().getColor(R.color.transparent));
roundingParams.setCornersRadius(圆角值,单位PX);
hierarchy.setRoundingParams(roundingParams);

我之前试了这种方式,刚改完的时候运行了一下,是可以的,但是打包后发现无效,追溯一下源码,发现这么一个细节:

【安卓】Fresco动态设置圆角后图片颜色渗出的问题_第6张图片 

如果调用 roundingParams.setOverlayColor () 方法,会指定为 RoundingMethod.OVERLAY_COLOR 模式,这样的就造成了虽然设置成功,但是因为透明色的原因,导致没有圆角效果,因为它会用一个透明的圆角图层覆盖到展示的图片上.如果用别的颜色又很难保证所有用到图片的地方背景色都一致,所以,用工具类去统一加载图片的朋友不建议使用这种方式.

  2.布局文件设置:

此方式没有测试如果设置后又在代码中动态设置圆角值是否会失效,请使用者根据自己的项目自行测试并选择合适的方式使用.

 

 

 

 

你可能感兴趣的:(移动开发)