585 Stimmen

Wie man ein Bild in ImageView skaliert, um das Seitenverhältnis beizubehalten

In Android habe ich die layout_width eines ImageView auf fill_parent festgelegt (was die gesamte Breite des Telefons einnimmt).

Wenn das Bild, das ich dem ImageView gebe, größer ist als die layout_width, wird Android es skalieren, oder? Aber was ist mit der Höhe? Behält Android das Seitenverhältnis bei, wenn es das Bild skaliert?

Was ich herausgefunden habe, ist, dass oben und unten im ImageView weißer Raum entsteht, wenn Android ein Bild skaliert, das größer ist als das ImageView. Stimmt das? Wenn ja, wie kann ich diesen weißen Raum eliminieren?

2voto

Mohsen Afshin Punkte 12953

Wenn Sie möchten, dass Ihr Bild den maximal möglichen Platz einnimmt, dann wäre die beste Option

android:layout_weight="1"
android:scaleType="fitCenter"

2voto

Romu Dizzy Punkte 103

Sie benötigen keinen Java-Code. Sie müssen nur:

Der Schlüssel liegt im match parent für Breite und Höhe

1voto

ITisha Punkte 760

Versuchen Sie android:layout_gravity für ImageView zu verwenden:

android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_vertical|center_horizontal"
android:layout_weight="1"

Das oben genannte Beispiel hat bei mir funktioniert.

1 Stimmen

Android:layout_weight="1" ist der Schlüssel.

1voto

Übergeben Sie Ihr ImageView und basierend auf der Bildschirmhöhe und -breite können Sie es skalieren.

    public void setScaleImage(EventAssetValueListenerView view){
        // Holen Sie sich das ImageView und sein Bitmap
        Drawable zeichnung = view.getDrawable();
        Bitmap bitmap = ((BitmapDrawable)zeichnung).getBitmap();
        // Aktuelle Dimensionen abrufen
        int breite = bitmap.getWidth();
        int höhe = bitmap.getHeight();

        float xSkalierung = ((float) 4) / breite;
        float ySkalierung = ((float) 4) / höhe;
        float skalierung = (xSkalierung <= ySkalierung) ? xSkalierung : ySkalierung;

        Matrix matrix = new Matrix();
        matrix.postScale(skalierung, skalierung);

        Bitmap skaliertesBitmap = Bitmap.createBitmap(bitmap, 0, 0, breite, höhe, matrix, true);
        BitmapDrawable ergebnis = new BitmapDrawable(skaliertesBitmap);
        breite = skaliertesBitmap.getWidth();
        höhe = skaliertesBitmap.getHeight();

        view.setImageDrawable(ergebnis);

        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
        params.width = breite;
        params.height = höhe;
        view.setLayoutParams(params);
    }

1voto

Parth Kapoor Punkte 1464

Ich habe einen Algorithmus, um ein Bitmap zu skalieren, um die Containerdimensionen am besten anzupassen, wobei das Seitenverhältnis beibehalten wird. Bitte finden Sie meine Lösung hier

Hoffe, dass dies jemandem in Zukunft hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X