Wie passt man ein Bild von zufälliger Größe an ein an ImageView
?
Wann:
- Die anfänglichen
ImageView
Abmessungen betragen 250 dp * 250 dp - Die größere Dimension des Bildes sollte auf 250 dp vergrößert / verkleinert werden
- Das Bild sollte sein Seitenverhältnis beibehalten
- Die
ImageView
Abmessungen sollten nach der Skalierung mit den Abmessungen des skalierten Bildes übereinstimmen
Zum Beispiel für ein Bild von 100 * 150, das Bild und das ImageView
sollte 166 * 250 sein.
Zum Beispiel für ein Bild von 150 * 100 sollte das Bild und das ImageView
250 * 166 sein.
Wenn ich die Grenzen setze als
<ImageView
android:id="@+id/picture"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:adjustViewBounds="true" />
Bilder passen richtig in die ImageView
, aber die ImageView
ist immer 250dp * 250dp.
ImageView
auf die Bildgröße ändern ? Zum Beispiel würde ein Bild von 100 dp x 150 dpImageView
auf die gleichen Maße skaliert ? Oder meinst du, wie man das Bild auf dieImageView
Grenzen skaliert ? Beispielsweise würde ein Bild von 1000 dp x 875 dp in 250 dp x 250 dp skaliert. Müssen Sie das Seitenverhältnis beibehalten?Antworten:
(Die Antwort wurde nach Klarstellung der ursprünglichen Frage stark geändert)
Nach Klarstellungen:
Dies kann nicht nur in XML erfolgen . Es ist nicht möglich, sowohl das Bild als auch das Bild
ImageView
so zu skalieren , dass die eine Dimension des Bildes immer 250 dp beträgt undImageView
die gleichen Abmessungen wie das Bild hat.Dieser Code skaliert
Drawable
von aImageView
, um in einem Quadrat wie 250 dp x 250 dp mit einer Dimension von genau 250 dp zu bleiben und das Seitenverhältnis beizubehalten. DannImageView
wird die Größe geändert, um den Abmessungen des skalierten Bildes zu entsprechen. Der Code wird in einer Aktivität verwendet. Ich habe es über den Button-Click-Handler getestet.Genießen. :) :)
Der XML-Code für
ImageView
:Dank dieser Diskussion für den Skalierungscode:
http://www.anddev.org/resize_and_rotate_image_-_example-t621.html
UPDATE 7. November 2012:
Nullzeigerprüfung hinzugefügt, wie in den Kommentaren vorgeschlagen
quelle
ImageView
, nicht beide.Möglicherweise keine Antwort auf diese spezielle Frage, aber wenn jemand wie ich nach einer Antwort sucht, wie ein Bild mit begrenzter Größe (z. B.
maxWidth
) in ImageView angepasst werden kann, während das Seitenverhältnis beibehalten wird, und dann den von ImageView belegten übermäßigen Speicherplatz entfernt Die einfachste Lösung besteht darin, die folgenden Eigenschaften in XML zu verwenden:quelle
quelle
Der folgende Code macht die Bitmap perfekt mit der gleichen Größe der Bildansicht. Holen Sie sich die Höhe und Breite des Bitmap-Bilds und berechnen Sie die neue Höhe und Breite mithilfe der Parameter der Bildansicht. Dadurch erhalten Sie das gewünschte Bild mit dem besten Seitenverhältnis.
genießen.
quelle
Versuchen Sie,
android:scaleType="fitXY"
zu Ihrem hinzuzufügenImageView
.quelle
fitXY
ändert fast immer das Seitenverhältnis des Bildes. OP erwähnt deutlich, dass das Seitenverhältnis beibehalten werden muss.Nach der Suche nach einem Tag denke ich, dass dies die einfachste Lösung ist:
quelle
adjustViewBounds
, XML hinzuzufügenDie beste Lösung, die in den meisten Fällen funktioniert, ist
Hier ist ein Beispiel:
quelle
Dies kann alles mit XML erfolgen ... die anderen Methoden scheinen ziemlich kompliziert zu sein. Wie auch immer, Sie stellen einfach die Höhe in dp auf das ein, was Sie wollen, und stellen dann die Breite ein, um Inhalte zu verpacken oder umgekehrt. Verwenden Sie scaleType fitCenter, um die Größe des Bildes anzupassen.
quelle
Verwenden Sie diesen Code:
quelle
Edited Jarno Argillanders Antwort:
Wie Bild mit Ihrer Breite passen und Höhe:
1) Initialisieren Image und Set Bild:
2) Ändern Sie jetzt die Größe:
Bearbeitete
scaleImage
Methode: ( Sie können ERWARTETE Begrenzungswerte ersetzen )Und .xml:
quelle
Das hat es für meinen Fall getan.
quelle
Wenn es bei Ihnen nicht funktioniert, ersetzen Sie android: background durch android: src
android: src wird den großen Streich spielen
Es funktioniert gut wie ein Zauber
quelle
Ich brauchte eine ImageView und eine Bitmap, damit die Bitmap auf die ImageView-Größe skaliert wird und die Größe der ImageView der skalierten Bitmap entspricht :).
Ich habe in diesem Beitrag nachgesehen, wie es geht, und schließlich getan, was ich will, aber nicht wie hier beschrieben.
und dann in der onCreateView-Methode
und dann layoutImageView () Code
Das Ergebnis ist, dass das Bild perfekt hineinpasst, das Seitenverhältnis beibehält und keine zusätzlichen Pixelreste aus ImageView enthält, wenn sich die Bitmap darin befindet.
Ergebnis
Es ist wichtig, dass ImageView wrap_content und adjustViewBounds auf true setzt. Dann funktionieren setMaxWidth und setMaxHeight. Dies ist im Quellcode von ImageView geschrieben.
quelle
Ich musste dies in einem Einschränkungslayout mit Picasso erledigen, also habe ich einige der oben genannten Antworten zusammengestellt und diese Lösung gefunden (ich kenne bereits das Seitenverhältnis des Bildes, das ich lade, das hilft):
Wird irgendwo nach setContentView (...) in meinem Aktivitätscode aufgerufen.
In meinem XML
Beachten Sie das Fehlen eines ConstraintBottom_toBottomOf-Attributs. ImageLoader ist meine eigene statische Klasse zum Laden von Bildern mithilfe von Methoden und Konstanten.
quelle
Ich benutze eine sehr einfache Lösung. Hier mein Code:
Meine Bilder werden dynamisch in einer Rasteransicht hinzugefügt. Wenn Sie diese Einstellungen in der Bildansicht vornehmen, kann das Bild automatisch im Verhältnis 1: 1 angezeigt werden.
quelle
Verwenden Sie einfache Mathematik, um die Bildgröße zu ändern. Sie können entweder die Größe ändern
ImageView
oder die Größe des zeichnbaren Bilds ändern, als es aktiviert istImageView
. Suchen Sie die Breite und Höhe Ihrer Bitmap, die Sie festlegen möchten,ImageView
und rufen Sie die gewünschte Methode auf. Angenommen, Ihre Breite 500 ist größer als die Höhe als die AufrufmethodeSie verwenden diese Klasse zum Ändern der Bitmapgröße.
XML-Code ist
quelle
Schnelle Antwort:
quelle