Cambiar el tamaño de la imagen a ancho completo y altura fija con Picasso

164

Tengo un LinearLayout vertical donde uno de los elementos se ImageViewcarga con Picasso. Necesito aumentar el ancho de la imagen al ancho completo del dispositivo y mostrar la parte central de la imagen recortada en una altura fija (150dp). Actualmente tengo el siguiente código:

Picasso.with(getActivity()) 
    .load(imageUrl) 
    .placeholder(R.drawable.placeholder) 
    .error(R.drawable.error) 
    .resize(screenWidth, imageHeight)
    .centerInside() 
    .into(imageView);

¿En qué valores debo poner screenWidthy imageHeight(= 150dp)?

David Rabinowitz
fuente

Respuestas:

486

Estás buscando:

.fit().centerCrop()

Lo que estos significan:

  • fit- espere hasta que ImageViewse haya medido y cambie el tamaño de la imagen para que coincida exactamente con su tamaño.
  • centerCrop- escale la imagen respetando la relación de aspecto hasta que ocupe el tamaño. Recorte la parte superior e inferior o izquierda y derecha para que coincida exactamente con el tamaño.
Jake Wharton
fuente
55
¿Cuál debería ser la altura de imageView? No quiero una altura fija para mi imageView. Debe cambiar según la altura de la imagen.
Chetna
44
.fit().centerInside()funcionó para mí donde solo el uso .centerInside()se bloqueaba con Center inside requires calling resize with positive width and height.un mensaje de error.
Rock Lee
@Rock Lee, debe cambiar su tamaño: '.load (url) .resize (targetWidth, targetHeight)' .........
FRK
8
.fit().centerCrop()o .fit().centerInside()no funciona La imagen no se está cargando imageView. sin .fit()imagen se está cargando bien. No estoy usando .resize()en ambos casos.
Nishant Bhakta
cómo cambiar su tamaño sin recortarlo de ningún lado y también manteniendo el aspecto
Rohit Sharma
1

En algunos casos el fit () es inútil. Antes de esperar debe finalizar la medición de ancho y alto. Entonces puedes usar globallayoutlistener. por ejemplo;

imageView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                Picasso.with(getActivity())
                        .load(imageUrl)
                        .placeholder(R.drawable.placeholder)
                        .error(R.drawable.error)
                        .resize(screenWidth, imageHeight)
                        .fit
                        .centerInside()
                        .into(imageView);
                imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });
Umut ADALI
fuente