在Picasso中使用Callback获取图像?

时间:2014-10-09 15:50:22

标签: android picasso

我希望展示照片系列,照片之间没有间隙,照片会定期更改。我意识到Picasso在开始下载之前初始化了ImageView,无论我是否在调用()之前获取(),它总是会这样做。

我获取()以保持图像之间的间隙较小并使用.placeholder(R.color.black),但即使从内存加载图像,间隙仍然可见。

我的代码看起来像这样

Picasso.with(getContext()).load(url).fetch();

然后延迟[目前正在修复,我想根据网络速度进行调整]

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

我注意到fetch()不支持任何回调参数并返回void,因此我似乎无法知道缓存何时变暖。

两个问题:

  1. 我是否可以在缓存图片时注意到这一点?
  2. 是否有不同的方法可以摆脱图像之间的断裂并使它们定期出现。
  3. [我知道我可以用某种方式手动编码,但如果毕加索支持它,我想使用它。]

5 个答案:

答案 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()方法提供了第二个参数,它是对成功和失败的回调。您可以使用它来跟踪图像何时到达。

Javadoc:http://square.github.io/picasso/javadoc/com/squareup/picasso/RequestCreator.html#into-android.widget.ImageView-com.squareup.picasso.Callback-

看看这个: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方法来解决此问题。我尝试了许多方法,但最终发现问题是使上一张图片等待下一张图片。