Как Загрузить Фон Макета С Помощью Picasso
Может ли кто-нибудь указать мне на пример того, как можно изменить фон XML-макета программно, используя Picasso? Все примеры, которые я нашел, могут обновить ImageView, используя Picasso,но не фон макета.
Невозможно установить LinearLayout BackgroundResource из URL с помощью Picasso
4 ответа:
Вы можете использовать мишень Пикассо:
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, Picasso содержит слабую ссылку на целевые объекты, следовательно, это, скорее всего, мусор.
Итак, следуя комментарию Джейка Уортона по одному из вопросов, я думаю, что это может быть хорошим способом:
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 и установите фон макета из этого ImageView с помощью getDrawable.
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() { } });