+-
java – Glide有加载PNG和SVG的方法吗?
我正在使用 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响应.

最佳答案
你可以使用 Glide& AndroidSVG共同实现您的目标.

有来自Glide for 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的方法吗? - 乐贴网