Nativ gibt es keine API für solche Funktionalität. Aber mit etwas clever codierten Picasso.Target können Sie solche Funktionalität leicht erreichen.
Ich füge hier einen schnellen Hack-ungeprüften Code hinzu, der Ihnen eine rugged Idee geben sollte, wonach Sie suchen sollten. Sie müssen testen und vielleicht Feinabstimmung, aber das sollte ziemlich OK sein.
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);
}
}
Denken Sie daran, dass Picasso nicht halten starke Hinweise auf das Ziel, das Sie innerhalb into(object)
setzen. Das heißt, intern verwendet Picasso WeakReference dazu.
Das bedeutet, dass Sie diese Selbstreferenz in TARGETS
benötigen, um die Referenz aller MultiFallBackTarget
zu behalten, die Sie erstellen und ihnen erlauben, sich selbst zu entfernen, wenn ihre Arbeit erledigt ist.