【发布时间】:2014-12-20 08:02:54
【问题描述】:
有没有办法在使用构建器时监听来自 Picasso 的事件,例如:
Picasso.with(getContext()).load(url).into(imageView);
我正在尝试在父 GridView 上调用 requestLayout() 和 invalidate(),以便它可以正确调整大小,但我不知道如何设置侦听器或回调。
我看到毕加索有错误事件报告,但是有成功事件吗?
【问题讨论】:
有没有办法在使用构建器时监听来自 Picasso 的事件,例如:
Picasso.with(getContext()).load(url).into(imageView);
我正在尝试在父 GridView 上调用 requestLayout() 和 invalidate(),以便它可以正确调整大小,但我不知道如何设置侦听器或回调。
我看到毕加索有错误事件报告,但是有成功事件吗?
【问题讨论】:
您可以使用Callback 来获取 onSuccess 和 onError 事件。只需像这样向您的请求添加一个新的回调:
Picasso.with(getContext())
.load(url)
.into(imageView, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
});
然后您可以在 onSuccess 回调中执行任何更改和修改。
【讨论】:
.error(R.drawable.error_placeholder_image)设置错误图片
如果您需要在加载到视图之前访问位图,请尝试使用:
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。
希望对你有帮助
【讨论】:
回答 @Jas 跟进问题作为对 MrEngineer13 答案的评论(因为我没有足够的声誉来评论任何答案),您应该在注册 Callback 之前使用 error() 方法在 @987654323 @方法,例如:
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
}
}
);
【讨论】:
Square 最近更新了 Target 类,现在有更多方法可以覆盖(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);
【讨论】:
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);
【讨论】:
试试这个
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);
}
});
【讨论】:
作为对其他答案的补充,以防您不知道在哪里使用原始图像视图,例如ImageView myIV:
原文:
Picasso.with(activity).load(url).into(myIV);
新的(在new Target() 的onBitmapLoaded() 内):
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
myIV.setImageBitmap(bitmap);
}
【讨论】: