web-dev-qa-db-ja.com

Picasso画像読み込みコールバック

Picassoを使用して、リストビューで3つの連続した画像を重ねて読み込みます。 Picassoが提供するメソッドを使用すると、これが簡単になります。ただし、これらの画像は異なる時間に読み込まれるため、画像が入るときにちらつき効果が発生します。たとえば、画像1の前に画像2が表示され、画像1を読み込むと不自然なスタッターが発生することがあります。すべての画像を表示できるようになるまで、リストビューの可視性を非表示に設定できればさらに良いでしょう。しかし、画像が読み込まれたときにシグナルを発するPicassoのコールバックメソッドはありません。

誰もがピカソを使用してこの種の状況の解決策を知っていますか?

ありがとう

42
Ebay89

.intoメソッドは、成功と失敗のコールバックである2番目の引数を提供します。これを使用して、3つすべてがいつ呼び出されたかを追跡し、それらの可視性に一度に対処できます。

Javadoc: https://square.github.io/picasso/2.x/picasso/com/squareup/picasso/RequestCreator.html#into-Android.widget.ImageView-com.squareup.picasso.Callback-

58
Jake Wharton

ピカソの画像読み込みコールバックを強化する簡単な例を次に示します。

Picasso.with(MainActivity.this)
            .load(imageUrl)
            .into(imageView, new com.squareup.picasso.Callback() {
                        @Override
                        public void onSuccess() {
                            //do smth when picture is loaded successfully

                        }

                        @Override
                        public void onError() {
                            //do smth when there is picture loading error
                        }
                    });

最新のPicassoのバージョンでは、onErrorはパラメーターとして例外を受け取り、with()ではなくget()を使用します

Picasso.get()
            .load(imageUrl)
            .into(imageView, new com.squareup.picasso.Callback() {
                        @Override
                        public void onSuccess() {
                            //do smth when picture is loaded successfully

                        }

                        @Override
                        public void onError(Exception ex) {
                            //do smth when there is picture loading error
                        }
                    });
34
dzikovskyy

以下に示すように、Picassoを使用してコールバックを実装できます。

ImageHandler.getSharedInstance(getApplicationContext()).load(imString).skipMemoryCache().resize(width, height).into(image, new Callback() {
            @Override
            public void onSuccess() {
                layout.setVisibility(View.VISIBLE);
            }

            @Override
            public void onError() {

            }
        });
}

ImageHandlerクラスの実装を以下に示します。

public class ImageHandler {

    private static Picasso instance;

    public static Picasso getSharedInstance(Context context)
    {
        if(instance == null)
        {
            instance = new Picasso.Builder(context).executor(Executors.newSingleThreadExecutor()).memoryCache(Cache.NONE).indicatorsEnabled(true).build();
        }
        return instance;
    }
}
9
Lord Sidious

これは、単純なピカソコールバックを使用して画像URLを画像ビューにロードしています

           Picasso.with(this)
            .load(Picurl)
            .into(Imageview, new Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError() {


                        }
                    }
            );

これは、より多くのコールバックを使用したピカソ画像の読み込みです

private void loadImage() {
    Picasso.with(this)
            .load(PicURL)
            .into(mContentTarget);
  }


private Target mContentTarget = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    Imageview.setImageBitmap(bitmap);
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
    }
};
3
MIDHUN CEASAR

Target オブジェクトを使用できます。 1回target1はコールバックを受信し、2番目のアセットをダウンロードして、target2、3回目のダウンロードをトリガーします。

0
mbmc