写真が一定の間隔で変化する、写真の間に隙間のない一連の写真を表示したいと思います。 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つの質問:
[これをなんとかして手動でコーディングできることはわかっていますが、ピカソがサポートしている場合は、それを使用したいと思います。]
ソース に基づくと、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) { }
});
これは古い質問ですが、fetch()
コマンドではfetch(Callback callback)
などのコールバックが可能です。これには、要求されたURIロードに対するonSuccess()
およびonError()
コールバックがあります。
Javadocの詳細については、 ここ を参照してください。
.into()
メソッドは、成功と失敗へのコールバックである2番目の引数を提供します。これを使用して、画像がいつ到着したかを追跡できます。
これを見てください: picassoライブラリを使用して独自のディスクキャッシュを実装する方法-Android? JakeWharton自身が答えを持っています。
問題を解決するためにnoPlaceholder
メソッドを試しました。私は多くの方法を試しましたが、最終的に問題は前の画像を次の画像を待たせることであることがわかりました。
Picassoのバージョン2.7以降、fetch()
メソッドを使用したコールバックをサポートしています。
Picasso.get()
.load(url)
.fetch(new Callback() {
@Override
public void onSuccess() {
//Success
}
@Override
public void onError(Exception e) {
//Error
}});