Picasso 没有直接给view设置背景的方法,所以只能用回调完成。
Picasso.with(mActivity).load(userInfo.getExp_http()).into({
@Override
public void onBitmapLoaded (Bitmap bitmap, Picasso.LoadedFrom loadedFrom){
LogUtils.log_e("fmy", "图片下载完成了");
//替换背景
view.setBackgroundDrawable(new BitmapDrawable(getResources(), bitmap));
}
@Override
public void onBitmapFailed (Drawable drawable){
LogUtils.log_e("fmy", "图片下载失败");
}
@Override
public void onPrepareLoad (Drawable drawable){
LogUtils.log_e("fmy", "开始下载图");
}
});
结果:偶尔会出现onPrepareLoad 回调了,但是onBitmapLoaded 并没有回调;
解决办法:(不使用 Target的匿名内部类)
private Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) {
//替换背景
view.setBackgroundDrawable(new BitmapDrawable(getResources(), bitmap));
}
@Override
public void onBitmapFailed(Drawable drawable) {
}
@Override
public void onPrepareLoad(Drawable drawable) {
}
};
Picasso.with(mActivity).load(userInfo.getExp_http()).into(target);
出现的原因:因为picasso 匿名内部类持有的是软引用。所以当你还没回调时候会被gc回收Target 对象,导致无法回调;