【发布时间】:2014-11-16 11:22:18
【问题描述】:
我遇到了同样的问题,我想使用 Picasso 生成的可绘制对象来进行图像缓存,但我无法获得相同的结果。这是我用来访问位图可绘制对象的代码:
Target targetBitmap = new Target() {
@Override
public void onPrepareLoad(Drawable arg0) {
}
@Override
public void onBitmapLoaded(Bitmap arg0, Picasso.LoadedFrom arg1) {
mBitmap = arg0;
BitmapDrawable d = new BitmapDrawable(context.getResources(), arg0);
int margin = 2;
int border = 0;
Rect r = new Rect(margin, margin, width - margin, height - margin);
int imageWidth = r.width();
int imageHeight = r.height();
if (imageHeight > r.height() - (border * 2)) {
imageHeight = r.height() - (border * 2);
}
r.left += ((r.width() - imageWidth) / 2) - border;
r.right = r.left + imageWidth + border + border;
r.top += ((r.height() - imageHeight) / 2) + border;
r.bottom = r.top + imageHeight + border + border;
Paint p = new Paint();
p.setColor(0xFFFFFF);
c.drawRect(r, p);
r.left += border;
r.right -= border;
r.top += border;
r.bottom -= border;
d.setBounds(r);
d.draw(c);
}
@Override
public void onBitmapFailed(Drawable arg0) {
}
};
Picasso.with(context).load(app.getListBookDetails().get(img_num).getImage_150x225()).into(targetBitmap);
但是这里永远不会调用 onBitmapLoaded 方法。如何访问此方法?如果可以的话请帮忙。我什么都抓了,但都是徒劳的。
谢谢 萨纳特
【问题讨论】:
-
如果你在毕加索电话之前添加
Log.d("myapp", app.getListBookDetails().get(img_num).getImage_150x225());这行代码是什么意思? -
它显示了我使用毕加索的图像 URL。
-
你的应用有网络权限吗?放
-
是的,当然图片在我不使用毕加索时显示,但我必须将其缓存在磁盘中,这就是我想使用相同的原因。
-
如果那是您的确切代码,
targetBitmap将被垃圾回收,因为 Picasso 持有对它的弱引用。您需要将其移动为字段或在视图或其他东西上实现以防止这种情况发生。
标签: android android-drawable picasso