Picasso(Android)ロード完了イベントをリッスンする方法は?
次のようなビルダーを使用するときに、ピカソからのイベントをリッスンする方法はありますか?
Picasso.with(getContext()).load(url).into(imageView);
親GridView
でrequestLayout()
およびinvalidate()
を呼び出そうとしているので、適切にサイズ変更されますが、リスナーまたはコールバックを設定する方法がわかりません。
Picassoにはエラーイベントの報告があるようですが、成功イベントはありますか?
Callback
を使用して、onSuccessおよびonErrorイベントを取得できます。次のようにリクエストに新しいコールバックを追加するだけです:
Picasso.with(getContext())
.load(url)
.into(imageView, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
});
その後、onSuccessコールバックで変更や修正を実行できます。
ビューにロードする前にビットマップにアクセスする必要がある場合は、使用してみてください:
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);
ビューまたはビューホルダーオブジェクトにターゲットを直接実装するのが理想的です。
お役に立てれば
@Jasのフォローアップ質問にMrEngineer13の回答へのコメントとして回答すると(回答にコメントするのに十分な評判がないため)、error()
メソッドでCallback
を登録する前にinto()
メソッドを使用する必要があります。次に例を示します。
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
}
}
);
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);
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);
これを試して
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);
}
});
他の回答を補完するものとして、元の画像ビューをどこで使用すべきかわからない場合、例えばImageView myIV
:
元の:
Picasso.with(activity).load(url).into(myIV);
新規(onBitmapLoaded()
のnew Target()
内):
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
myIV.setImageBitmap(bitmap);
}