如何收听毕加索(Android)加载完成事件?


90

使用以下构建器时,有没有办法侦听毕加索的事件:

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

我想打电话requestLayout()invalidate()GridView所以它会适当调整,但我不知道如何设置监听器或回调。

我看到毕加索有错误事件报告,但是有成功事件吗?

Answers:


270

您可以使用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
当执行onError()时如何显示错误图像?
Jas 2015年

2
使用.error(R.drawable.error_placeholder_image)到的一组错误的图像
猛禽

如何从onSuccess内部访问“ this”上下文?我需要在“ this”上下文中更新一些变量,以及如何在回调内部访问imageView?Thx
声致发光技术

2
试试这个YourClassName.this.yourVariable @sonoluminescence
Sofiane Hassaini 2016年

1
这在科特林会是什么样?
Dan2899 '18

31

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

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。

希望这可以帮助


imgView在哪里?
Noor Hossain

@NoorHossain在加载位图时设置图像位图
famfamfam

6

回答@Jas后续问题作为对MrEngineer13答案的注释(由于我没有足够的声誉在任何答案中都进行注释),因此应error()在注册Callbackat 方法之前使用该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
        }
    }
);

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

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

0

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

原版的:

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

新功能(在onBitmapLoaded()new Target()):

public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    myIV.setImageBitmap(bitmap);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.