我希望展示照片系列,照片之间没有间隙,照片会定期更改。我意识到Picasso在开始下载之前初始化了ImageView,无论我是否在调用()之前获取(),它总是会这样做。
我获取()以保持图像之间的间隙较小并使用.placeholder(R.color.black),但即使从内存加载图像,间隙仍然可见。
我的代码看起来像这样
Picasso.with(getContext()).load(url).fetch();
然后延迟[目前正在修复,我想根据网络速度进行调整]
Picasso.with(getContext()).load(url).into(screenSurface);
我注意到fetch()不支持任何回调参数并返回void,因此我似乎无法知道缓存何时变暖。
两个问题:
[我知道我可以用某种方式手动编码,但如果毕加索支持它,我想使用它。]
答案 0 :(得分:16)
基于the source,看起来fetch
在完成时不执行任何操作,包括通知任何潜在的侦听器。遗憾的是,FetchAction
不是公共类,因此您也无法覆盖此功能。
您可以使用自定义Target
子类解决此问题,如下所示:
Picasso.with(getContext()).load(url).into(new Target() {
@Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
// cache is now warmed up
}
@Override public void onBitmapFailed(Drawable errorDrawable) { }
@Override public void onPrepareLoad(Drawable placeHolderDrawable) { }
});
答案 1 :(得分:5)
我知道这是一个较旧的问题,但fetch()
命令允许回调,例如fetch(Callback callback)
。
这有一个onSuccess()
和onError()
回调请求的URI加载。
有关javadoc详细信息,请参阅here
答案 2 :(得分:0)
.into()
方法提供了第二个参数,它是对成功和失败的回调。您可以使用它来跟踪图像何时到达。
看看这个:How to implement my own disk cache with picasso library - Android?杰克沃顿自己也有答案。
答案 3 :(得分:0)
从Picasso 2.7版本开始,它确实支持使用 fetch()
方法进行回调。
Picasso.get()
.load(url)
.fetch(new Callback() {
@Override
public void onSuccess() {
//Success
}
@Override
public void onError(Exception e) {
//Error
}});
答案 4 :(得分:0)
我尝试了noPlaceholder
方法来解决此问题。我尝试了许多方法,但最终发现问题是使上一张图片等待下一张图片。