ピカソ(Android)ロード完了イベントをリッスンする方法は?


90

次のようなビルダーを使用するときに、ピカソからのイベントをリッスンする方法はありますか?

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

私は呼んしようとしているrequestLayout()invalidate()、親にGridViewそれが適切にサイズ変更しますが、私はリスナーまたはコールバックを設定する方法がわからないようにします。

ピカソにエラーイベントレポートがあるようですが、成功イベントはありますか?

回答:


270

a 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

2
.error(R.drawable.error_placeholder_image)エラー画像の設定に使用
Raptor

onSuccess内から「this」コンテキストにアクセスするにはどうすればよいですか?'this'コンテキストでいくつかの変数を更新する必要があります。また、コールバック内でimageViewにアクセスするにはどうすればよいですか?Thx
ソノルミネセンス

2
これをお試しくださいYourClassName.this.yourVariable @sonolumination
Sofiane Hassaini

1
これはコトリンでどのように見えますか?
Dan2899 2018

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()前に登録する方法をCallbackinto()例えば、方法:

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クラスを更新し、オーバーライドするメソッドが増えました(onPrepareLoadおよび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) {

    }
};

そして、あなたはまだ使用する必要があります:

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);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.