Vergrößern Sie das Bild in voller Breite und fester Höhe mit Picasso

Ich habe eine vertikale LinearLayout, wo eines der Elemente ist ein ImageView geladen mit Picasso. Ich muss die Breite des Bildes auf die volle Gerätebreite erhöhen und den Mittelteil des Bildes, der durch eine feste Höhe (150dp) abgeschnitten wurde, anzeigen. 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 sollte ich in screenWidth und imageHeight (= 150dp) setzen?

  • Android: EditText.setInputType () wie man für E-Mail einrichten, aber nicht automatisch vorschlagen
  • Ressourcen auf Geschwister Submodul, Gradle Projekt
  • Radio-Gruppe onclick-Ereignis nicht abfeuern, wie sage ich, welches ausgewählt ist?
  • LWJGL-Port zum Android
  • Android - konfiguriere Spinner, um Array zu verwenden
  • Erfassen Sie das Ende des Flings auf ScrollView
  • OutOfMemory Ausnahme beim Laden von Bitmap aus externem Speicher
  • SDK Manager.exe funktioniert nicht
  • Kann den Paketwert in AndroidManifest.xml für Modul nicht finden
  • Kommunizieren zwischen Moderatoren in MVP android Anwendung
  • Halten Sie die Scroll-Position bei jedem Auffrischen in der Listenansicht
  • Wie bekomme ich eine Datei-Instanz eines Drawable?
  • 2 Solutions collect form web for “Vergrößern Sie das Bild in voller Breite und fester Höhe mit Picasso”

    Du suchst nach:

     .fit().centerCrop() 

    Was bedeutet das:

    • fit – warten Sie, bis das ImageView gemessen wurde und das Bild so ändern, dass es genau der Größe entspricht.
    • centerCrop – skaliere das Bild, das das Seitenverhältnis ehrt, bis es die Größe füllt. Ernte entweder die oben und unten oder links und rechts so passt es genau die Größe genau.

    Bildgröße mit Größe ändern (x, y) Generell ist es optimal, wenn dein Server oder API das Bild in den exakten Maßen liefert, die du benötigst, was ein perfekter Kompromiss zwischen Bandbreite, Speicherverbrauch und Bildqualität ist.

    Leider ist es nicht immer in Ihrer Kontrolle, um Bilder in den perfekten Dimensionen anzufordern. Wenn die Bilder in einer seltsamen Größe sind, können Sie die Größe (horizontalSize, verticalSize) verwenden, um die Abmessungen Ihres Bildes in eine passendere Größe zu ändern. Dies wird das Bild ändern, bevor es in der ImageView angezeigt wird.

     Picasso .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .resize(600, 200) // resizes the image to these dimensions (in pixel). does not respect aspect ratio .into(imageViewResize); 

    Verwendung von scaleDown () Bei Verwendung der Option resize () wird Picasso auch dein Image gehoben. Da ein kleines Bild größer ist, ohne die Qualität des Bildes zu verbessern, kann die Rechenzeit verschwendet werden. Rufen Sie scaleDown (true) an, um nur die Größe zu verwenden (), wenn das Originalbild größere Dimensionen als die Zielgröße hat.

     Picasso .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .resize(6000, 2000) .onlyScaleDown() // the image will only be resized if it's bigger than 6000x2000 pixels. .into(imageViewResizeScaleDown); 

    Vermeiden von gestreckten Bildern mit Skalierung Nun, wie bei jeder Bildmanipulation, können die Größenänderung von Bildern das Seitenverhältnis wirklich verzerren und die Bildanzeige vergrößern. In den meisten deiner Anwendungsfälle willst du das verhindern. Picasso gibt Ihnen hier zwei Milderungsmöglichkeiten, entweder call centerCrop () oder centerInside ().

    CenterCrop

    CenterCrop () ist eine Zuschneidetechnik, die das Bild skaliert, so dass es die angeforderten Grenzen des ImageViews füllt und dann das Extra kultiviert. Die ImageView wird vollständig ausgefüllt, aber das gesamte Bild wird möglicherweise nicht angezeigt.

     Picasso .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .resize(600, 200) // resizes the image to these dimensions (in pixel) .centerCrop() .into(imageViewResizeCenterCrop); 

    CenterInside

    CenterInside () ist eine Zuschneidetechnik, die das Bild skaliert, so dass beide Dimensionen gleich oder kleiner als die angeforderten Grenzen der ImageView sind. Das Bild wird vollständig angezeigt, aber das gesamte ImageView konnte nicht ausgefüllt werden.

     Picasso .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .resize(600, 200) .centerInside() .into(imageViewResizeCenterInside); 

    Last, but not least: Picassos Fit () Die besprochenen Optionen sollten Ihre Bedürfnisse für die Funktionalität bezüglich Bildgrößenänderung und Skalierung abdecken. Es gibt eine letzte Helferfunktionalität von Picasso, was sehr nützlich sein kann: fit ().

     Picasso .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .fit() // call .centerInside() or .centerCrop() to avoid a stretched image .into(imageViewFit); 

    Fit () misst die Dimensionen der Ziel-ImageView und verwendet intern die Größe (), um die Bildgröße auf die Dimensionen der ImageView zu reduzieren. Es gibt zwei Dinge zu wissen über fit (). Zuerst kann Calling Fit () die Bildanforderung verzögern, da Picasso warten muss, bis die Größe des ImageViews gemessen werden kann. Zweitens kannst du nur fit () mit einem ImageView als Ziel verwenden (wir sehen uns noch andere Ziele an).

    Der Vorteil ist, dass das Bild auf die niedrigstmögliche Auflösung ist, ohne seine Qualität zu beeinträchtigen. Eine niedrigere Auflösung bedeutet, dass weniger Daten im Cache gehalten werden sollen. Dies kann die Auswirkungen von Bildern in den Speicherplatz Ihrer App erheblich reduzieren. Zusammenfassend lässt sich feststellen, wenn Sie einen niedrigeren Speicheraufprall über ein bisschen schnellere Ladezeiten bevorzugen, ist fit () ein großartiges Werkzeug.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.