I’m using Glide to load some images asynchronously into some of my ImageView
s, and I know it can handle images like PNG
or JPG
as it can handle SVG
.
Thing is, As far as I know, the way I load those two kinds of image differs. Like:
Loading “normal” images
Glide.with(mContext) .load("URL") .into(cardHolder.iv_card);
Loading 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);
And if I try to load SVG with the first method it won’t work. If I try to load PNG or JPG with the second method, it won’t work either.
Is there a generic way to load both image types using Glide?
The server where I’m fetching those images from don’t tell me the image type before I download it. It’s a REST server and the resource will be retrieved in a way like "http://foo.bar/resource"
. The only way to know the image type is reading the HEAD response.
Advertisement
Answer
You can use Glide & AndroidSVG together to achieve your goal.
There is sample from 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);
This way you can achieve your goal. I hope this is helpful.