Ich habe eine listView mit einem Adapter, ImageView
der eine variable Größe (Breite und Höhe) enthält. Ich muss die Größe der mit Picasso geladenen Bilder auf die maximale Breite des Layouts und eine variable Höhe ändern, die durch das Seitenverhältnis des Bildes gegeben ist.
Ich habe diese Frage überprüft: Ändern Sie die Bildgröße mit Picasso auf volle Breite und feste Höhe
Die fit()
Arbeiten, aber ich habe nichts gefunden, um das Seitenverhältnis des Bildes zu halten.
Dieser Code funktioniert teilweise, wenn ich die Höhe im Layout des Adapters festgelegt habe:
Picasso.with(this.context).load(message_pic_url)
.placeholder(R.drawable.profile_wall_picture)
.fit().centerInside()
.into(holder.message_picture);
Es werden jedoch Leerzeichen zwischen den Bildern der listView generiert, da die Bilder möglicherweise nicht so hoch sind.
Danke im Voraus.
java.lang.IllegalArgumentException: At least one dimension has to be positive number.
Fehler bei der Rotation, dies ist im Fragment, irgendwelche Ideen, warum dies passieren kann?.resize(holder.message_picture.getWidth(), 0)
Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x;
.resize(width, 0)
onGlobalLayout()
nicht aufgerufen wird und das Bild nicht angezeigt wird.Ich bin auf dasselbe Problem gestoßen und habe eine Weile gebraucht, um eine Lösung zu finden, aber ich bin schließlich auf etwas gestoßen, das für mich funktioniert.
Zuerst habe ich den Picasso-Anruf in geändert
Entfernen der
fit
und dercenterInside
. Als Nächstes müssen Sie der ImageView in Ihrem XML die folgenden Zeilen hinzufügenHoffentlich funktioniert es auch für Sie.
quelle
layout_width
undlayout_height
auf der ImageView? Ich versuche , mitmatch_parent
undwrap_content
jeweils aber es funktioniert nicht :(0dp
undmatch_parent
mit einem Gewicht von1
aber nicht 100% sicher und ich glaube nicht, dass wir dies mehr in unserer Anwendung haben.Schließlich habe ich es gelöst, indem ich eine Transformation von Picasso durchgeführt habe. Hier ist der Ausschnitt:
Diese Linie kann mit Ihrer gewünschten Breite angepasst werden:
Zusätzlich enthält dieser Ausschnitt einen Rückruf zum Laden von verstecktem und fehlerzeichenbarem integriertem Picasso.
Wenn Sie weitere Informationen zum Debuggen von Fehlern benötigen, MÜSSEN Sie einen benutzerdefinierten Listener (Picasso Builder) implementieren, da die
onError
Callback
Informationen "null" sind. Sie wissen nur, dass ein Fehler im Verhalten der Benutzeroberfläche vorliegt.Ich hoffe, das hilft jemandem, viele Stunden zu sparen.
quelle
holder.message_picture.getWidth()
0 zurück und verursacht einen Fehlerwidth and height must be > 0
. Irgendwelche Ideen, wie man diesen Fehler behebt?Mai akzeptierte Antwort ist nützlich für alle , aber wenn Sie mehr verbindlich
ViewHolder
für MultipleViews
dann können Sie Ihren Code reduzieren Klasse Erstellen für Transformation und vorbei Image ausViewHolder
.Anruf von
ViewHolder
:Hoffe es wird dir helfen.
quelle
imageView.getWidth()
0 zurück und verursacht einen Fehlerwidth and height must be > 0
. Irgendwelche Ideen, wie man diesen Fehler behebt?Dies hilft Ihnen bei der variablen Höhe der Bilder für alle Geräte
quelle
Ich habe einen einfachen Helfer geschrieben, der sich darum kümmert, den Listener für das vollständige Layout hinzuzufügen und (imageView) aufzurufen, wenn der Layoutprozess abgeschlossen ist.
}}
So können Sie es einfach so verwenden, zum Beispiel in onViewCreated () von fragment.
quelle
quelle
Weitere Transformationen: https://github.com/wasabeef/picasso-transformations
quelle
layout_width
undlayout_height
von demImageView
in diesem Fall sein?Erweitern Sie ImageView und überschreiben Sie dann die onMeasure-Methode wie folgt.
quelle
Eigentlich stieg ich beim Laden des Bildes in CustomImageView ein, das über eine zoombare Funktionalität verfügte
Fehler war
Ich habe es gelöst, indem ich den Code aus der akzeptierten Antwort bearbeitet habe. Ich habe die maximale Breite meiner Anzeige erhalten, als ob meine Bildansichtsbreite bereits match_parent wäre.
if (! imgUrl.equals ("")) {
quelle
Versuchen Sie diesen Code, arbeitete für mich.
quelle
quelle