web-dev-qa-db-ja.com

ピカソのコールバックで画像を取得しますか?

写真が一定の間隔で変化する、写真の間に隙間のない一連の写真を表示したいと思います。 Picassoは、ダウンロードを開始する前にImageViewを初期化し、into()を呼び出す前にfetch()を実行するかどうかに関係なく、常に初期化することに気付きました。

画像間のギャップを小さく保つためにfetch()を使用し、.placeholder(R.color.black)も使用していますが、画像がメモリから読み込まれた場合でも、ギャップは表示されます。

私のコードは次のようになります

Picasso.with(getContext()).load(url).fetch();

その後、遅延が発生します[現在修正されており、ネットワーク速度に応じて調整したい]

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

Fetch()はコールバックパラメータをサポートしておらず、voidを返すことに気づきました。そのため、キャッシュがいつウォームアップされたかを知ることができないようです。

2つの質問:

  1. 画像がキャッシュされたときに気付くことができますか?
  2. 画像間の切れ目を取り除き、定期的に表示させる別の方法はありますか?.

[これをなんとかして手動でコーディングできることはわかっていますが、ピカソがサポートしている場合は、それを使用したいと思います。]

11
Oliver Hausler

ソース に基づくと、fetchは、潜在的なリスナーへの通知を含め、完了時に何もしないように見えます。残念ながら、FetchActionはパブリッククラスではないため、この機能をオーバーライドすることもできません。

この問題は、次のようにカスタムTargetサブクラスを使用して回避できます。

Picasso.with(getContext()).load(url).into(new Target() {
    @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        // cache is now warmed up
    }
    @Override public void onBitmapFailed(Drawable errorDrawable) { }
    @Override public void onPrepareLoad(Drawable placeHolderDrawable) { }
});
16
bmat

これは古い質問ですが、fetch()コマンドではfetch(Callback callback)などのコールバックが可能です。これには、要求されたURIロードに対するonSuccess()およびonError()コールバックがあります。

Javadocの詳細については、 ここ を参照してください。

5
Duncan Hoggan

.into()メソッドは、成功と失敗へのコールバックである2番目の引数を提供します。これを使用して、画像がいつ到着したかを追跡できます。

Javadoc: http://square.github.io/picasso/javadoc/com/squareup/picasso/RequestCreator.html#into-Android.widget.ImageView-com.squareup.picasso.Callback-

これを見てください: picassoライブラリを使用して独自のディスクキャッシュを実装する方法-Android? JakeWharton自身が答えを持っています。

0
Little Child

問題を解決するためにnoPlaceholderメソッドを試しました。私は多くの方法を試しましたが、最終的に問題は前の画像を次の画像を待たせることであることがわかりました。

0
user12652918

Picassoのバージョン2.7以降、fetch()メソッドを使用したコールバックをサポートしています。

Picasso.get()
                    .load(url)
                    .fetch(new Callback() {
                        @Override
                        public void onSuccess() {
                            //Success
                        }
                        @Override
                        public void onError(Exception e) {
                            //Error
                        }});
0
Aniruddha KM