java - Glide 有加载 PNG 和 SVG 的方法吗?

标签 java android svg android-glide

我正在使用 Glide将一些图像 异步 加载到我的一些 ImageView 中,我知道它可以处理像 PNGJPG 这样的图像> 因为它可以处理 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 响应。

最佳答案

您可以使用 Glide & AndroidSVG一起实现你的目标。

有来自 Glide 的 SVG 示例。 Sample Example

Setup RequestBuilder

requestBuilder = Glide.with(mActivity)
    .using(Glide.buildStreamModelLoader(Uri.class, mActivity), InputStream.class)
    .from(Uri.class)
    .as(SVG.class)
    .transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
    .sourceEncoder(new StreamEncoder())
    .cacheDecoder(new FileToStreamDecoder<SVG>(new SvgDecoder()))
    .decoder(new SvgDecoder())
    .placeholder(R.drawable.ic_facebook)
    .error(R.drawable.ic_web)
    .animate(android.R.anim.fade_in)
    .listener(new SvgSoftwareLayerSetter<Uri>());

Use RequestBuilder with uri

Uri uri = Uri.parse("http://upload.wikimedia.org/wikipedia/commons/e/e8/Svg_example3.svg");
requestBuilder
    .diskCacheStrategy(DiskCacheStrategy.SOURCE)
    // SVG cannot be serialized so it's not worth to cache it
    .load(uri)
    .into(mImageView);

这样你就可以实现你的目标。我希望这会有所帮助。

关于java - Glide 有加载 PNG 和 SVG 的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35507893/

相关文章:

java - 从 Integer 包装类转换为 int 原始类

android - 使用 FFT 和 Complex 类获取频率 wav 音频

android - 日期更改为过去日期时未收到日期更改的广播接收器

android - ProcessLifecycleOwner 未在 Application 类中提供生命周期回调

Android-Glide 4.0.0-RC0 : how to set tint color for ImageView after successfully loading SVG

javascript - 如何在 Javascript 中设置 SVG CSS 属性的样式?

java - 重命名所有包后为"Error: Could not find or load main class"

java - 如何使用 Log4J 设置我的 BlazeDS 实现?

javascript - 是否可以在 Play Framework View 中 console.log ?

html - 如何在 0 和 1 范围内缩放 SVG 坐标?