Ridimensiona l'immagine alla massima larghezza e altezza fissa con Picasso


164

Ho un LinearLayout verticale in cui uno degli elementi è ImageViewcaricato usando Picasso. Ho bisogno di aumentare la larghezza dell'immagine alla larghezza completa del dispositivo e di visualizzare la parte centrale dell'immagine ritagliata da un'altezza fissa (150dp). Al momento ho il seguente codice:

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

Quali valori devo inserire screenWidthe imageHeight(= 150dp)?

Risposte:


486

Stai cercando:

.fit().centerCrop()

Cosa significano:

  • fit- attendere fino a quando non ImageViewè stato misurato e ridimensionare l'immagine in modo che corrisponda esattamente alle sue dimensioni.
  • centerCrop- ridimensiona l'immagine rispettando le proporzioni fino a riempire le dimensioni. Ritaglia la parte superiore e inferiore o sinistra e destra in modo che corrisponda esattamente alla dimensione.

5
Quale dovrebbe essere l'altezza di imageView? Non voglio un'altezza fissa per il mio imageView. Dovrebbe cambiare in base all'altezza dell'immagine.
Chetna,

4
.fit().centerInside()ha funzionato per me in cui il solo utilizzo .centerInside()si arrestava in modo anomalo con Center inside requires calling resize with positive width and height.un messaggio di errore.
Rock Lee,

@Rock Lee, devi ridimensionarlo: '.load (url) .resize (targetWidth, targetHeight)' .........
FRK

8
.fit().centerCrop()o .fit().centerInside()non funziona. L'immagine non si sta caricando imageView. senza .fit()immagine si sta caricando bene. Non sto usando .resize()in entrambi i casi.
Nishant Bhakta,

come ridimensionarlo senza ritagliarlo da nessuna parte e anche mantenere l'aspetto
Rohit Sharma

1

In alcuni casi fit () è inutile. Prima di attendere la fine della misura di larghezza e altezza. Quindi puoi usare globallayoutlistener. per esempio;

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);
            }
        });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.