Redimensionner l'image en pleine largeur et hauteur fixe avec Picasso

164

J'ai un LinearLayout vertical où l'un des éléments est ImageViewchargé à l'aide de Picasso. J'ai besoin d'augmenter la largeur de l'image jusqu'à la largeur totale de l'appareil et d'afficher la partie centrale de l'image recadrée d'une hauteur fixe (150dp). J'ai actuellement le code suivant:

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

Quelles valeurs dois-je mettre dans screenWidthet imageHeight(= 150dp)?

David Rabinowitz
la source

Réponses:

486

Tu recherches:

.fit().centerCrop()

Ce que cela signifie:

  • fit- attendez que le ImageViewait été mesuré et redimensionnez l'image pour qu'elle corresponde exactement à sa taille.
  • centerCrop- redimensionnez l'image en respectant le rapport hauteur / largeur jusqu'à ce qu'elle remplisse la taille. Recadrez le haut et le bas ou la gauche et la droite pour qu'il corresponde exactement à la taille.
Jake Wharton
la source
5
Quelle devrait être la hauteur de l'imageView? Je ne veux pas d'une hauteur fixe pour mon imageView. Il devrait changer en fonction de la hauteur de l'image.
Chetna
4
.fit().centerInside()a fonctionné pour moi où la simple utilisation .centerInside()plantait avec Center inside requires calling resize with positive width and height.un message d'erreur.
Rock Lee
@Rock Lee, vous devez le redimensionner: '.load (url) .resize (targetWidth, targetHeight)' .........
FRK
8
.fit().centerCrop()ou .fit().centerInside()ne fonctionne pas. L'image ne se charge pas imageView. sans .fit()image se charge bien. Je n'utilise pas .resize()dans les deux cas.
Nishant Bhakta
comment le redimensionner sans le recadrer de n'importe quel côté et en conservant l'aspect
Rohit Sharma
1

Dans certains cas, fit () est inutile. Avant, vous devez attendre la fin de la mesure de la largeur et de la hauteur. Vous pouvez donc utiliser globallayoutlistener. par exemple;

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
la source