
Gibt es eine Problem, o Fehler, oder sie wollten einfach dazu, im Objekt ImageView, Programmierung in Android. Wenn Sie eine breite zuweisen match_parent zu diesem Objekt, und einer Höhe wrap_content, für den Fall, dass die Bild Sie gehen als registrieren Quelle haben Sie einige höheren Dimensionen zu den von der ImageView, Es scheint Problem einige.
Die Problem Es entsteht, wenn das Bild, das dem ImageView-Objekt zugeordnet ist, hat eine niederen Dimensionen zu diesem Objekt. In diesem Fall, das Bild erscheint mit den ursprünglichen Abmessungen, und deckt nicht die ImageView komplett.
In einem solchen Fall, so viel wie spielen mit den verschiedenen Optionen und Attribute Das ImageView Objekt, nie Sie erhalten das Ergebnis, dem Sie möchten. Sie können die Eigenschaft ändern. scaleType, adjustViewBounds, layout_height, layout_width, … und nichts, keinen Erfolg.
Wie erstelle ich ein Bild von einer ImageView wird auf die Größe des Objekts vollständig skalieren
Für Erhalten der Zweck der Bild von der ImageView ändern Sie die Größe auf die Größe des Objekts ohne seine Proportionen, die Lösung ist die Schaffung einer neue Java-Klasse in unserem Projekt, erweitern die ImageView Klasse und zu beheben das Problem haben wir.
Dazu, in Ihrem Projekt, CREA ein neue Klasse. Wir gehen zu nennen ResizableImageView, und Ihr Code ist wie folgt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package com.mypackage; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; public class ResizableImageView extends ImageView { public ResizableImageView(Context context, AttributeSet attrs) { super(context, attrs); } public ResizableImageView(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Drawable d = getDrawable(); if (d == null) { super.setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); return; } int imageHeight = d.getIntrinsicHeight(); int imageWidth = d.getIntrinsicWidth(); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); float imageRatio = 0.0F; if (imageHeight > 0) { imageRatio = imageWidth / imageHeight; } float sizeRatio = 0.0F; if (heightSize > 0) { sizeRatio = widthSize / heightSize; } int width; int height; if (imageRatio >= sizeRatio) { width = widthSize; height = width * imageHeight / imageWidth; } else { height = heightSize; width = height * imageWidth / imageHeight; } setMeasuredDimension(width, height); } } |
Einmal erstellt e umgesetzt Klasse ResizableImageView, Was wir jetzt tun, ist Ändern die XML von der Layout anzeigen, wo ist der ImageView was wir wollen ist Größe das Bild.
Gehen wir davon aus, dass, zuvor ändern, die ImageView XML ändern ist wie folgt:
1 2 3 4 5 6 | <ImageView android:id="@+id/miImagen" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="https://cdn1.professor-falken.com/@drawable/imagen" /> |
Nun, nur noch Ändern die Klasse eines solchen Objekts für die Neu erstellte Klasse, auf folgende Weise:
1 2 3 4 5 6 | <com.mypackage.ResizableImageView android:id="@+id/miImagen" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="https://cdn1.professor-falken.com/@drawable/imagen" /> |
Mit diesem Klasse und die Änderung in der XML-code, Wir werden das Bild innerhalb des Objekts erreichen. ImageView wird die Größe, Wahrung der Verhältnismäßigkeit, sogar in Fällen, in welches Bild auf eine Dimension kleiner als der container.
