Czy istnieje sposób, aby nasłuchiwać wydarzeń z Picassa podczas korzystania z konstruktora, takiego jak:
Picasso.with(getContext()).load(url).into(imageView);
Próbuję zadzwonić requestLayout()
i invalidate()
na rodzica GridView
więc jej rozmiar prawidłowo, ale nie wiem jak ustawić słuchacza lub callback.
Widzę, że Picasso ma raportowanie zdarzeń błędów, ale czy istnieje zdarzenie sukcesu?
.error(R.drawable.error_placeholder_image)
do ustawiania obrazu błęduJeśli potrzebujesz uzyskać dostęp do mapy bitowej przed jej załadowaniem do widoku, spróbuj użyć:
private Target target = new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { } @Override public void onBitmapFailed() { } }
W metodzie wywołania:
Picasso.with(this).load("url").into(target);
Idealnie byłoby zaimplementować Target bezpośrednio na widoku lub obiekcie posiadacza widoku.
Mam nadzieję że to pomoże
źródło
Odpowiadając na pytanie uzupełniające @Jas jako komentarz do odpowiedzi MrEngineer13 (ponieważ nie mam wystarczającej reputacji, aby komentować w żadnej odpowiedzi), powinieneś użyć
error()
metody przed zarejestrowaniem metodyCallback
atinto()
, na przykład: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 } } );
źródło
Square ostatnio zaktualizowało klasę Target i teraz jest więcej metod do przesłonięcia (
onPrepareLoad
ionBitmapFailed
):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) { } };
I nadal musisz używać:
źródło
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);
źródło
Spróbuj tego
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); } });
źródło
Jako uzupełnienie innych odpowiedzi, jeśli nie wiesz, gdzie użyć oryginalnego widoku obrazu, np .
ImageView myIV
:Oryginał:
Nowy (wewnątrz
onBitmapLoaded()
znew Target()
):public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { myIV.setImageBitmap(bitmap); }
źródło