java-如何用毕加索指定多个后备图像?

java-如何用毕加索指定多个后备图像?,第1张

概述Picassolibrary允许您轻松加载图像,例如:Picasso.with(context).load(url).into(imageview);该API还允许指定错误图片.但是,如果我希望库在放弃并显示错误图像之前先尝试三个或四个不同的URL,该怎么办?理想情况下,这些图像将按顺序尝试,如果未加载前一个图像,则回落到下一个图像

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-如何用毕加索指定多个后备图像?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1090601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存