Picasso library允许您轻松加载图像,例如:
Picasso.with(context).load(url).into(imagevIEw);
该API还允许指定错误图片.但是,如果我希望库在放弃并显示错误图像之前先尝试三个或四个不同的URL,该怎么办?理想情况下,这些图像将按顺序尝试,如果未加载前一个图像,则回落到下一个图像.
解决方法:
本地没有此类功能的API.但是,使用一些巧妙的代码Picasso.Target,您可以轻松实现此类功能.
我将在此处添加一个快速的,未经黑客培训的代码,该代码应该使您对要查找的内容有一个大致的了解.您必须进行测试,甚至可能需要进行微调,但这应该还可以.
private static final List<MultiFallBackTarget> TARGETS = new ArrayList<MultiFallBackTarget>();public static class MultiFallBackTarget implements Picasso.Target { private WeakReference<ImageVIEw> weakImage; private List<String> fallbacks; public MultiFallBackTarget(ImageVIEw image){ weakImage = new WeakReference<>(image); fallbacks = new ArrayList<String>(); TARGETS.add(this); } public voID addFallback(String fallbackUrl){ fallbacks.add(fallbackUrl); } public voID onBitmapLoaded(Bitmap bitmap, LoadedFrom from){ removeSelf(); ImageVIEw image = weakImage.get(); if(image == null) return; image.setimageBitmap(bitmap); } public voID onBitmapFailed(Drawable errorDrawable){ ImageVIEw image = weakImage.get(); if(image == null) { removeSelf(); return; } if(fallbacks.size() > 0){ String nextUrl = fallbacks.remove(0); // here you call picasso again Picasso.with(image.getContext()).load(nextUrl).into(this); } else { removeSelf(); } } public voID onPrepareLoad(Drawable placeHolderDrawable){} private voID removeSelf(){ TARGETS.remove(this); }}
请记住,毕加索并没有强烈引用您放入对象中的目标.这意味着,毕加索在内部使用的是WeakReference.
因此,这意味着您需要TARGETS中的自引用来保留对您创建的所有MultiFallBackTarget的引用,并允许他们在完成工作后自删除.
总结以上是内存溢出为你收集整理的java-如何用毕加索指定多个后备图像?全部内容,希望文章能够帮你解决java-如何用毕加索指定多个后备图像?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)