我正在使用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的方法吗?全部内容,希望文章能够帮你解决java – Glide有加载PNG和SVG的方法吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)