wake-up-neo.com

Wie für Picasso (Android) laden komplette Ereignisse zu hören?

Gibt es eine Möglichkeit, auf Ereignisse von Picasso zu warten, wenn Sie den Builder wie folgt verwenden:

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

Ich versuche, requestLayout() und invalidate() für die übergeordnete GridView aufzurufen, damit die Größe ordnungsgemäß geändert wird, aber ich weiß nicht, wie ein Listener oder ein Rückruf festgelegt wird.

Ich sehe, dass Picasso Fehlerereignisberichte hat, aber gibt es ein Erfolgsereignis?

83
Prodikl

Sie können eine Callback verwenden, um die Ereignisse onSuccess und onError abzurufen. Fügen Sie einfach einen neuen Rückruf zu Ihrer Anfrage hinzu:

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

                        }

                        @Override
                        public void onError() {

                        }
                    });

Dann können Sie im onSuccess-Callback Änderungen und Modifikationen vornehmen.

244
MrEngineer13

Wenn Sie auf die Bitmap zugreifen müssen, bevor sie in die Ansicht geladen wird, versuchen Sie Folgendes:

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

In der aufrufenden Methode:

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

Idealerweise implementieren Sie Target direkt in einem View- oder View-Holder-Objekt.

Hoffe das hilft

28
Androidme

Square hat in letzter Zeit die Target-Klasse aktualisiert. Nun gibt es mehrere Methoden zum Überschreiben (onPrepareLoad und 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) {

    }
};

Und du musst noch benutzen:

Picasso.with(context).load(url).into(target);
6

Wenn Sie die @Jas Folgefrage als Kommentar zu der Antwort von MrEngineer13 beantworten (da ich nicht genug Ruf habe, um eine Antwort zu kommentieren), sollten Sie die error()-Methode verwenden, bevor Sie die Callback bei der into()-Methode registrieren. Beispiel:

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
        }
    }
);
5
 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);
3
vaibhav jain

Versuche dies

       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
A.G.THAMAYS

Als Ergänzung zu anderen Antworten, falls Sie nicht wissen, wo Sie die Originalbildansicht verwenden sollen, z. ImageView myIV:

Original:

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

Neu (in onBitmapLoaded() von new Target()):

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