如何收听Picasso(Android)加载完整事件?

时间:2014-10-24 13:16:07

标签: java android picasso

有没有办法在使用建筑师时监听毕加索的事件,如:

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

我正在尝试在父requestLayout()上调用invalidate()GridView,因此它会正确调整大小,但我不知道如何设置侦听器或回调。

我看到Picasso有错误事件报告,但有成功事件吗?

7 个答案:

答案 0 :(得分:249)

您可以使用Callback来获取onSuccess和onError事件。只需为您的请求添加一个新的回调,如下所示:

Picasso.with(getContext())
    .load(url)
    .into(imageView, new com.squareup.picasso.Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError() {

                        }
                    });

然后,您可以在onSuccess回调中执行任何更改和修改。

答案 1 :(得分:29)

如果您需要在将位图加载到视图之前访问该位图,请尝试使用:

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。

希望这有帮助

答案 2 :(得分:6)

Square最近更新了Target类,现在有更多方法可以覆盖(onPrepareLoadonBitmapFailed):

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);

答案 3 :(得分:5)

回答@Jas跟进问题作为对MrEngineer13答案的评论(由于我没有足够的声誉在任何答案中发表评论),您应该在注册error()之前使用Callback方法在into()方法,例如:

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
        }
    }
);

答案 4 :(得分:3)

 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);

答案 5 :(得分:0)

试试这个

       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);
                }
            });

答案 6 :(得分:0)

作为其他答案的补充,如果您不知道在哪里使用原始图片视图,例如ImageView myIV

原件:

Picasso.with(activity).load(url).into(myIV);

新增(onBitmapLoaded()new Target()):

public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    myIV.setImageBitmap(bitmap);
}