web-dev-qa-db-fra.com

Comment charger un fond de mise en page à l'aide de Picasso

Quelqu'un peut-il m'indiquer un exemple de modification de l'arrière-plan d'une mise en page XML programmée à l'aide de Picasso? Tous les exemples que j'ai trouvés sont capables de mettre à jour un ImageView à l'aide de Picasso - mais pas un fond de mise en page. 

Impossible de définir LinearLayout BackgroundResource à partir d'une URL à l'aide de Picasso

12

Vous pouvez utiliser la cible de Picasso:

         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) {

            }
        });

METTRE À JOUR

Comme @BladeCoder l'a mentionné dans le commentaire, Picasso conserve une faible référence aux objets cible et est donc susceptible d'être récupéré.

Donc, après commentaire de Jake Wharton sur l'un des problèmes, je pense que cela pourrait être une bonne solution:

  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
    }
}
31
mmark

J'utilise un ImageView comme ImageHolder temporaire. Dans un premier temps, chargez l'image avec picasso dans ImageView et définissez le fond de disposition à partir de cette ImageView à l'aide de 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() {

                        }
                    });
6
Thiha

Aucune des solutions ci-dessus n'a fonctionné pour moi. Mais la solution de @ Thiha était la plus proche. Le ci-dessous a fonctionné pour moi:

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() {
        }
    });
1
Arash Fotouhi

Dans mon cas, j'avais besoin que l'image corresponde à la taille de la imageview. Au lieu de charger l'image en arrière-plan, j'ai ajouté cette propriété à l'imageview et chargé l'image normalement.

Android:scaleType="fitXY"
0
Henok Getachew