如何听毕加索(Android)加载完整事件?

当使用构建器时,有没有一种方法可以监听毕加索的事件,比如:

Picasso.with(getContext()).load(url).into(imageView);

我试图在父 GridView上调用 requestLayout()invalidate(),这样它就可以适当地调整大小,但我不知道如何设置侦听器或回调。

我看到毕加索有错误事件报告,但是有一个成功的事件吗?

51968 次浏览

You can use a Callback to get onSuccess and onError events. Just add a new Callback to your request like so:

Picasso.with(getContext())
.load(url)
.into(imageView, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {


}


@Override
public void onError() {


}
});

Then you can perform any alterations and modifications in the onSuccess callback.

If you need to access the bitmap before it is loaded to the view, try using :

private Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
}
@Override
public void onBitmapFailed() {
}
}

In the calling method:

Picasso.with(this).load("url").into(target);

Ideally you'd implement Target on a view or view holder object directly.

Hope this helps

Square lately has updated Target class and now there are more methods to override (onPrepareLoad and 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) {


}
};

And you still have to use:

Picasso.with(context).load(url).into(target);

Answering @Jas follow up question as a comment to MrEngineer13's answer (since I don't have enough reputation to comment in any answer), you should use the error() method prior to registering the Callback at the into() method, for example:

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);

Try This

       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);
}
});

As a complement to other answers, in case you don't know where to use original image view, e.g. ImageView myIV:

Original:

Picasso.with(activity).load(url).into(myIV);

New (inside onBitmapLoaded() of new Target()):

public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
myIV.setImageBitmap(bitmap);
}