Gibt es eine Möglichkeit, auf Ereignisse von Picasso zu warten, wenn Sie den Builder wie folgt verwenden:
Picasso.with(getContext()).load(url).into(imageView);
Ich versuche, requestLayout()
und invalidate()
für die übergeordnete GridView
aufzurufen, damit die Größe ordnungsgemäß geändert wird, aber ich weiß nicht, wie ein Listener oder ein Rückruf festgelegt wird.
Ich sehe, dass Picasso Fehlerereignisberichte hat, aber gibt es ein Erfolgsereignis?
Sie können eine Callback
verwenden, um die Ereignisse onSuccess und onError abzurufen. Fügen Sie einfach einen neuen Rückruf zu Ihrer Anfrage hinzu:
Picasso.with(getContext())
.load(url)
.into(imageView, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
});
Dann können Sie im onSuccess-Callback Änderungen und Modifikationen vornehmen.
Wenn Sie auf die Bitmap zugreifen müssen, bevor sie in die Ansicht geladen wird, versuchen Sie Folgendes:
private Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
}
@Override
public void onBitmapFailed() {
}
}
In der aufrufenden Methode:
Picasso.with(this).load("url").into(target);
Idealerweise implementieren Sie Target direkt in einem View- oder View-Holder-Objekt.
Hoffe das hilft
Square hat in letzter Zeit die Target-Klasse aktualisiert. Nun gibt es mehrere Methoden zum Überschreiben (onPrepareLoad
und onBitmapFailed
):
Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
Und du musst noch benutzen:
Picasso.with(context).load(url).into(target);
Wenn Sie die @Jas Folgefrage als Kommentar zu der Antwort von MrEngineer13 beantworten (da ich nicht genug Ruf habe, um eine Antwort zu kommentieren), sollten Sie die error()
-Methode verwenden, bevor Sie die Callback
bei der into()
-Methode registrieren. Beispiel:
Picasso.with(getContext())
.load(url)
.error(R.drawable.error_placeholder_image)
.into(imageView, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
//Success image already loaded into the view
}
@Override
public void onError() {
//Error placeholder image already loaded into the view, do further handling of this situation here
}
}
);
private final Callback mImageCallback = new Callback() {
@Override
public void onSuccess() {
startPostponedEnterTransition();
}
@Override
public void onError() {
startPostponedEnterTransition();
}
};
RequestCreator creator = Picasso.with(getActivity()).load(list.get(position).getId());
creator.into(imageView, mImageCallback);
Versuche dies
Picasso.with(context)
.load(services.get(position).getImageInactive())
.into(holder.icon, new Callback() {
@Override
public void onSuccess() {
holder.imageLoad.setVisibility(View.GONE);
}
@Override
public void onError() {
holder.icon.setImageResource(R.drawable.ic_error_image_load);
}
});
Als Ergänzung zu anderen Antworten, falls Sie nicht wissen, wo Sie die Originalbildansicht verwenden sollen, z. ImageView myIV
:
Original:
Picasso.with(activity).load(url).into(myIV);
Neu (in onBitmapLoaded()
von new Target()
):
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
myIV.setImageBitmap(bitmap);
}