Picassoを使用して、リストビューで3つの連続した画像を重ねて読み込みます。 Picassoが提供するメソッドを使用すると、これが簡単になります。ただし、これらの画像は異なる時間に読み込まれるため、画像が入るときにちらつき効果が発生します。たとえば、画像1の前に画像2が表示され、画像1を読み込むと不自然なスタッターが発生することがあります。すべての画像を表示できるようになるまで、リストビューの可視性を非表示に設定できればさらに良いでしょう。しかし、画像が読み込まれたときにシグナルを発するPicassoのコールバックメソッドはありません。
誰もがピカソを使用してこの種の状況の解決策を知っていますか?
ありがとう
.into
メソッドは、成功と失敗のコールバックである2番目の引数を提供します。これを使用して、3つすべてがいつ呼び出されたかを追跡し、それらの可視性に一度に対処できます。
ピカソの画像読み込みコールバックを強化する簡単な例を次に示します。
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
}
});
以下に示すように、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;
}
}
これは、単純なピカソコールバックを使用して画像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) {
}
};
Target
オブジェクトを使用できます。 1回target1
はコールバックを受信し、2番目のアセットをダウンロードして、target2
、3回目のダウンロードをトリガーします。