我正在使用 Glide 将一些图像 异步 加载到我的一些 ImageView
中,我知道它可以处理像 PNG
或 JPG
这样的图像 SVG
。
事情是,据我所知,我加载这两种图像的方式不同。喜欢:
加载“正常”图像
Glide.with(mContext)
.load("URL")
.into(cardHolder.iv_card);
加载 SVG
GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder = Glide.with(mContext)
.using(Glide.buildStreamModelLoader(Uri.class, mContext), InputStream.class)
.from(Uri.class)
.as(SVG.class)
.transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
.sourceEncoder(new StreamEncoder())
.cacheDecoder(new FileToStreamDecoder<>(new SVGDecoder()))
.decoder(new SVGDecoder())
.listener(new SvgSoftwareLayerSetter<Uri>());
requestBuilder
.diskCacheStrategy(DiskCacheStrategy.NONE)
.load(Uri.parse("URL"))
.into(cardHolder.iv_card);
如果我尝试使用第一种方法加载 SVG,它将无法正常工作。如果我尝试使用第二种方法加载 PNG 或 JPG,它也不会起作用。
有没有一种通用的方法可以使用 Glide 加载这两种图像类型?
我从中获取这些图像的服务器在下载之前没有告诉我图像类型。它是一个 REST 服务器,资源将以类似 "http://foo.bar/resource"
的方式检索。了解图像类型的唯一方法是读取 HEAD 响应。
原文由 Mauker 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以一起使用 Glide 和 AndroidSVG 来实现您的目标。
有来自 Glide for SVG 的示例。 示例示例
这样你就可以实现你的目标。我希望这是有帮助的。