Picassoを使用してプログラムでXMLレイアウトの背景を変更する方法の例を誰かに教えてもらえますか?私が見つけたすべての例は、ピカソを使用してImageViewを更新できますが、レイアウトの背景は更新できません。
ピカソのターゲットを使用できます。
Picasso.with(this).load("http://imageUrl").into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
mYourLayout.setBackground(new BitmapDrawable(bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
[〜#〜]更新[〜#〜]
コメントで@BladeCoderが言及したように、ピカソはターゲットオブジェクトへの弱い参照を保持しているため、ガベージコレクションされる可能性があります。
したがって、問題の1つについて Jake Whartonのコメント に従って、これは良い方法になると思います:
CustomLayout mCustomLayout = (CustomLayout)findViewById(R.id.custom_layout)
Picasso.with(this).load("http://imageUrl").into(mCustomLayout);
CustomLayout.Java:
public class CustomLayout extends LinearLayout implements Target {
public CustomLayout(Context context) {
super(context);
}
public CustomLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
setBackground(new BitmapDrawable(getResources(), bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
//Set your error drawable
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
//Set your placeholder
}
}
ImageViewを一時的なImageHolderとして使用しています。最初に、ピカソの画像をImageViewにロードし、getDrawableを使用してこのImageViewからレイアウト背景を設定します。
ImageView img = new ImageView(this);
Picasso.with(this)
.load(imageUri)
.fit()
.centerCrop()
.into(img, new Callback() {
@Override
public void onSuccess() {
myLayout.setBackgroundDrawable(img.getDrawable());
}
@Override
public void onError() {
}
});
上記の解決策はどれも私にとってうまくいきませんでした。しかし、@ Thihaのソリューションが最も近いものでした。以下は私のために働きました:
final ImageView img = new ImageView(this);
Picasso.with(img.getContext()).load(url).into(img, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
collapsingToolbarLayout.setBackgroundDrawable(img.getDrawable());
}
@Override
public void onError() {
}
});
私の場合、イメージをイメージビューのサイズに合わせる必要があったので、バックグラウンドでイメージをロードする代わりに、このプロパティをイメージビューに追加して、通常どおりにイメージをロードしました。
Android:scaleType="fitXY"