Bagaimana cara mendengarkan Picasso (Android) memuat acara lengkap?

92

Apakah ada cara untuk mendengarkan acara dari Picasso saat menggunakan pembuatnya seperti:

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

Saya mencoba menelepon requestLayout()dan invalidate()menggunakan orang tua GridViewsehingga ukurannya akan diubah dengan benar, tetapi saya tidak tahu cara menyetel pendengar atau panggilan balik.

Saya melihat bahwa Picasso memiliki pelaporan peristiwa kesalahan, tetapi adakah peristiwa yang berhasil?

Keith
sumber

Jawaban:

272

Anda dapat menggunakan Callbackuntuk mendapatkan peristiwa onSuccess dan onError. Cukup tambahkan Callback baru ke permintaan Anda seperti:

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

                        }

                        @Override
                        public void onError() {

                        }
                    });

Kemudian Anda dapat melakukan perubahan dan modifikasi apa pun di callback onSuccess.

MrEngineer13
sumber
1
Bagaimana cara menampilkan gambar kesalahan saat onError () dijalankan ??
Jas
2
Gunakan .error(R.drawable.error_placeholder_image)untuk menyetel gambar kesalahan
Raptor
Bagaimana cara mengakses konteks 'ini' dari dalam onSuccess? Saya perlu memperbarui beberapa variabel dalam konteks 'ini', dan juga bagaimana cara mengakses imageView di dalam callback? Thx
sonoluminescence
2
Coba ini YourClassName.this.yourVariable @sonoluminescence
Sofiane Hassaini
1
Akan seperti apa tampilan ini di Kotlin?
Dan2899
31

Jika Anda perlu mengakses bitmap sebelum dimuat ke tampilan, coba gunakan:

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

Dalam metode panggilan:

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

Idealnya Anda akan menerapkan Target pada tampilan atau objek view holder secara langsung.

Semoga ini membantu

Androidme
sumber
dimana imgView itu?
Noor Hossain
@NoorHossain mengatur bitmap gambar saat bitmap dimuat
famfamfam
6

Menjawab pertanyaan tindak lanjut @Jas sebagai komentar atas jawaban MrEngineer13 (karena saya tidak memiliki reputasi yang cukup untuk berkomentar dalam jawaban apa pun), Anda harus menggunakan error()metode ini sebelum mendaftar Callbackdi into()metode, misalnya:

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
        }
    }
);
Guilherme Santos
sumber
6

Square baru-baru ini memperbarui kelas Target dan sekarang ada lebih banyak metode untuk diganti ( onPrepareLoaddan 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) {

    }
};

Dan Anda masih harus menggunakan:

Picasso.with(context).load(url).into(target);
Mateusz Pryczkowski
sumber
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);
vaibhav jain
sumber
0

Coba ini

       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);
                }
            });
AGTHAMAYS
sumber
0

Sebagai pelengkap jawaban lain, jika Anda tidak tahu di mana harus menggunakan tampilan gambar asli, misalnya ImageView myIV:

Asli:

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

Baru (dalam onBitmapLoaded()dari new Target()):

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