How to listen for Picasso (Android) load complete events?

前端 未结 7 1204
不知归路
不知归路 2020-12-02 14:11

Is there a way to listen for events from Picasso when using the builder like:

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

I\'m trying

相关标签:
7条回答
  • 2020-12-02 14:25

    If you need to access the bitmap before it is loaded to the view, try using :

    private Target target = new Target() {
          @Override
          public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {       
          }
          @Override
          public void onBitmapFailed() {
          }
    }
    

    In the calling method:

    Picasso.with(this).load("url").into(target);
    

    Ideally you'd implement Target on a view or view holder object directly.

    Hope this helps

    0 讨论(0)
  • 2020-12-02 14:28

    Square lately has updated Target class and now there are more methods to override (onPrepareLoad and onBitmapFailed):

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

    And you still have to use:

    Picasso.with(context).load(url).into(target);
    
    0 讨论(0)
  • 2020-12-02 14:32
     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 讨论(0)
  • 2020-12-02 14:37

    Answering @Jas follow up question as a comment to MrEngineer13's answer (since I don't have enough reputation to comment in any answer), you should use the error() method prior to registering the Callback at the into() method, for example:

    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
            }
        }
    );
    
    0 讨论(0)
  • 2020-12-02 14:41

    As a complement to other answers, in case you don't know where to use original image view, e.g. ImageView myIV:

    Original:

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

    New (inside onBitmapLoaded() of new Target()):

    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        myIV.setImageBitmap(bitmap);
    }
    
    0 讨论(0)
  • 2020-12-02 14:42

    You can use a Callback to get onSuccess and onError events. Just add a new Callback to your request like so:

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

    Then you can perform any alterations and modifications in the onSuccess callback.

    0 讨论(0)
提交回复
热议问题