Ändern Sie die Bildgröße mit Picasso auf volle Breite und feste Höhe

164

Ich habe ein vertikales LinearLayout, in dem eines der Elemente ImageViewmit Picasso geladen wird. Ich muss die Breite des Bildes auf die volle Gerätebreite erhöhen und den mittleren Teil des Bildes anzeigen, der auf eine feste Höhe (150 dp) zugeschnitten ist. Ich habe derzeit den folgenden Code:

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

Welche Werte soll ich eingeben screenWidthund imageHeight(= 150dp)?

David Rabinowitz
quelle

Antworten:

486

Du suchst nach:

.fit().centerCrop()

Was diese bedeuten:

  • fit- Warten Sie, bis das ImageViewBild gemessen wurde, und passen Sie die Größe des Bildes genau an seine Größe an.
  • centerCrop- Skalieren Sie das Bild unter Berücksichtigung des Seitenverhältnisses, bis es die Größe ausfüllt. Schneiden Sie entweder oben und unten oder links und rechts zu, damit es genau der Größe entspricht.
Jake Wharton
quelle
5
Wie hoch sollte die imageView sein? Ich möchte keine feste Höhe für meine imageView. Sie sollte sich je nach Höhe des Bildes ändern.
Chetna
4
.fit().centerInside()arbeitete für mich, wo nur die Verwendung .centerInside()mit einer Center inside requires calling resize with positive width and height.Fehlermeldung abstürzte .
Rock Lee
@ Rock Lee, Sie müssen die Größe ändern: '.load (url) .resize (targetWidth, targetHeight)' .........
FRK
8
.fit().centerCrop()oder .fit().centerInside()funktioniert nicht. Bild wird nicht geladen imageView. ohne .fit()Bild wird gut geladen. Ich benutze nicht .resize()in beiden Fällen.
Nishant Bhakta
wie man die Größe ändert, ohne es von irgendeiner Seite zu beschneiden und auch den Aspekt beizubehalten
Rohit Sharma
1

In einigen Fällen ist fit () nutzlos. Bevor Sie warten müssen, bis die Breiten- und Höhenmessung beendet ist. Sie können also globallayoutlistener verwenden. beispielsweise;

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
quelle