默认情况下,当仅设置roundedCornerRadius
或roundAsCircle
时,Fresco 绘制位图时使用邻近采样,会导致出现锯齿状的像素化效果。为了解决这个问题,您可以参考以下代码示例,在设置roundedCornerRadius
或roundAsCircle
的同时,通过设置setPaintFilterBitmap(true)
以启用双线性采样(FILTER_BITMAP_FLAG),从而改善绘制效果并解决图片锯齿问题,使图片边缘更平滑。
更多圆角和圆圈的使用参见 Fresco 官网说明。
RoundingParams roundingParams = RoundingParams.fromCornersRadius(5f); roundingParams.setPaintFilterBitmap(true); mSimpleDraweeView.getHierarchy().setRoundingParams(roundingParams);
当使用 Fresco 加载 CMYK 格式的图像时出现 “Unsupportted color conversion request” 错误时,通常表示着 Fresco 不支持直接加载 CMYK 图像。原因在于 CMYK 是一种常用于印刷的颜色模式,与数字设备上通常使用的是 RGB 颜色模式存在差异。
Fresco 内部可能会尝试将 CMYK 图像转换为 RGB 格式以适配 Android 设备的显示需求,但是可能会由于转换失败或不支持的 CMYK 格式等原因,导致转换请求失败并出现该错误消息。
为了解决该问题,您可以通过将图像转码器设置为系统转码来处理 CMYK 图像,该方式兼容性更优。因此,在实际业务场景中,若您涉及 CMYK 业务,推荐在初始化时设置系统转码;若不涉及 CMYK 业务,则推荐在初始化时设置 native 软件转码,该方式内存占用更少。具体代码示例如下所示。
ImagePipelineConfig.Builder builder = ImagePipelineConfig.newBuilder(context) ... .setImageTranscoderType(ImageTranscoderType.JAVA_TRANSCODER) ...
由于部分手机自定义的应用安装器不遵循标准规则,可能导致应用中加载了不同 ABI 的 .so 文件而导致崩溃,出现 “NativeMemoryChunk” 错误。
为了解决该问题,您需要引入开源 Fresco 的 Soloader 库,在 dependencies 中加入 soloader 依赖。
val version = "0.11.0" //推荐使用最新稳定版本 implementation "com.facebook.soloader:annotation:$version" implementation "com.facebook.soloader:nativeloader:$version" implementation "com.facebook.soloader:soloader:$version"
添加依赖后,SoLoader 会解析 lib 目录中的 .so 文件,确定应该将哪些 ABI 的 .so 文件提取到 lib-main 目录中。以确保应用中只加载一种类型的 ABI,从而使 SoLoader 能够适配更多机型。