Saltar al contenido

Cómo cargar el fondo del diseño usando Picasso

Intenta entender el código correctamente antes de adaptarlo a tu proyecto si ttienes algo que aportar puedes decirlo en los comentarios.

Solución:

Puedes usar el Blanco 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) 

            
        );

ACTUALIZAR

Como @BladeCoder mencionó en el comentario, Picasso tiene una referencia débil a los objetos Target, por lo que es probable que se recolecte basura.

Entonces, siguiendo el comentario de Jake Wharton sobre uno de los problemas, creo que esta podría ser una buena manera de hacerlo:

  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
    

Uso un ImageView como ImageHolder temporal. Al principio, cargue la imagen con picasso en ImageView y configure el fondo de diseño de este ImageView usando 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() 

                        
                    );

Ninguna de las soluciones anteriores funcionó para mí. Pero la solución de @Thiha fue la más cercana. Lo siguiente funcionó para mí:

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() 
        
    );

Te mostramos reseñas y puntuaciones

Si te gusta la informática, tienes la opción de dejar un artículo acerca de qué te ha impresionado de esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *