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?

6voto

Atif Mahmood Punkte 8502

Verwenden Sie diese Eigenschaften in ImageView, um das Seitenverhältnis beizubehalten:

android:adjustViewBounds="true"
android:scaleType="fitXY"

0 Stimmen

Nur diese Antwort hat mir geholfen. Danke!

5voto

developerSumit Punkte 950

Wenn die Bildqualität abnimmt: verwenden Sie

android:adjustViewBounds="true"

anstatt

android:adjustViewBounds="true"
android:scaleType="fitXY"

3voto

oneConsciousness Punkte 300

Für alle, die möchten, dass das Bild genau in das ImageView passt, mit ordnungsgemäßer Skalierung und ohne Beschneidung, verwenden Sie

imageView.setScaleType(ScaleType.FIT_XY);

bei dem imageView die Ansicht darstellt, die Ihr ImageView repräsentiert

5 Stimmen

Nein, dies ändert das Seitenverhältnis. Die Dokumente sagen: "Skalieren Sie X und Y unabhängig voneinander, sodass src genau zu dst passt. Dies kann das Seitenverhältnis von src ändern."

0 Stimmen

Übrigens kann FIT_XY nicht verwendet werden, um die Breite/Höhe des Bildes zur Anzeige auf dem ImageView zu ändern.

0 Stimmen

ScaleType.FIT_XY bewahrt nicht das Seitenverhältnis. ScaleType.FIT_XY wird das Bild strecken, um genau in die Abmessungen des ImageView zu passen.

3voto

msevgi Punkte 4738

Sie können die Bildschirmbreite berechnen. Und Sie können Bitmap skalieren.

 public static float getScreenWidth(Activity activity) {
        Display display = activity.getWindowManager().getDefaultDisplay();
        DisplayMetrics outMetrics = new DisplayMetrics();
        display.getMetrics(outMetrics);
        float pxWidth = outMetrics.widthPixels;
        return pxWidth;
    }

Berechnen Sie die Bildschirmbreite und die skalierte Bildhöhe nach der Bildschirmbreite.

float screenWidth=getScreenWidth(act)
  float newHeight = screenWidth;
  if (bitmap.getWidth() != 0 && bitmap.getHeight() != 0) {
     newHeight = (screenWidth * bitmap.getHeight()) / bitmap.getWidth();
  }

Nachdem können Sie das Bitmap skalieren.

Bitmap scaledBitmap=Bitmap.createScaledBitmap(bitmap, (int) screenWidth, (int) newHeight, true);

3voto

lukasz Punkte 3092

Wenn Sie dies programmgesteuert tun, stellen Sie sicher, dass Sie die Setter in der richtigen Reihenfolge aufrufen:

imageView.setAdjustViewBounds(true)
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP)

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