Как прослушать события загрузки Picasso (Android)?
Есть ли способ прослушать события из Picasso при использовании построителя вроде:
Picasso.with(getContext()).load(url).into(imageView);
Я пытаюсь вызвать requestLayout()
и invalidate()
в родительском GridView
, поэтому он будет правильно изменен, но я не знаю, как установить прослушиватель или обратный вызов.
Я вижу, что Picasso имеет отчет об ошибках, но есть ли событие успеха?
Ответы
Ответ 1
Вы можете использовать Callback
для получения событий onSuccess и onError. Просто добавьте новый обратный вызов к вашему запросу следующим образом:
Picasso.with(getContext())
.load(url)
.into(imageView, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
});
Затем вы можете выполнить любые изменения и модификации в обратном вызове onSuccess.
Ответ 2
Если вам нужно получить доступ к растровому изображению до его загрузки в представление, попробуйте использовать:
private Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
}
@Override
public void onBitmapFailed() {
}
}
В вызывающем методе:
Picasso.with(this).load("url").into(target);
В идеале вы должны реализовать Target непосредственно на объекте view или view.
Надеюсь, что это поможет
Ответ 3
Квадрат в последнее время обновил целевой класс, и теперь есть больше способов переопределить (onPrepareLoad
и 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) {
}
};
И вам все равно придется использовать:
Picasso.with(context).load(url).into(target);
Ответ 4
Ответ на следующий вопрос в качестве комментария к запросу MrEngineer13 (так как у меня недостаточно репутации для комментариев в любом ответе), вы должны использовать метод error()
до регистрации Callback
в into()
, например:
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
}
}
);
Ответ 5
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);
Ответ 6
Попробуйте это
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);
}
});
Ответ 7
В дополнение к другим ответам, если вы не знаете, где использовать оригинальное изображение, например ImageView myIV
:
Оригинал:
Picasso.with(activity).load(url).into(myIV);
Новый (внутри onBitmapLoaded()
new Target()
):
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
myIV.setImageBitmap(bitmap);
}
Ответ 8
Это загрузка URL-адреса изображения в изображение с помощью простых обратных вызовов picasso
Picasso.with(this)
.load(Picurl)
.into(Imageview, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
}
);
И это загрузка изображения с помощью picasso с большим количеством обратных вызовов
private void loadImage() {
Picasso.with(this)
.load(PicURL)
.into(mContentTarget);
}
private Target mContentTarget = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Imageview.setImageBitmap(bitmap);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};