2017-09-30 4 views
0

Ich habe die folgende Bildansicht mit einem Bild kleiner als die RelativeLayout, die diese ImageView enthält. Ich möchte, dass das Bild auf die Breite der Bildansicht passt, aber das funktioniert nicht. Zum Beispiel ich diesen relativeLayout habe mit 350dp Breite:Bildansicht nicht skalieren Bild

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="350dp" 
    android:layout_height="wrap_content" 
    android:background="@drawable/selector_button_grey" 
    android:clickable="true" 
    android:padding="5dp"> 

    <ImageView 
     android:id="@+id/image_selector" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:scaleType="fitCenter" 
     android:background="@color/black" 
     android:src="@drawable/Nachos" 
     /> 

    <TextView 
     android:id="@+id/image_selector_text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentStart="true" 
     android:layout_below="@+id/image_selector" 
     android:gravity="center_horizontal|center_vertical" 
     android:paddingBottom="5dp" 
     android:paddingLeft="5dp" 

     android:textSize="18sp" /> 


</RelativeLayout> 

Wie man auf dem Bild das Bild in der Mitte zu sehen ist. Das Problem mit fitXY ist, dass die Breite funktioniert, aber nicht die Höhe ändert. Ich möchte someHitng wie, fitX. Ich habe auch versucht centerInside, aber es sieht genauso aus.

enter image description here

Antwort

0

Ich habe eine andere Methode verwendet. Zuerst obtaing ich die dimesions ohne aus dem Speicher geladen:

BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
       bitmapOptions.inJustDecodeBounds = true; 
       try { 
        BitmapFactory.decodeStream(new FileInputStream(f), null, bitmapOptions); 
        BitmapFactory.decodeFile(f.getName(), bitmapOptions); 
        float scale = (bitmapOptions.outHeight * 1f)/(bitmapOptions.outWidth); 
        cache.put(image, value); 
       } catch (Throwable e) { 
        e.printStackTrace(); 
       } 

Dann diesen Wert verwendet Skala

imageView.setLayoutParams(new android.widget.RelativeLayout.LayoutParams(IMAGE_SIZE, Math.round(IMAGE_SIZE * imageData.getScale()))); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
    imageView.setAdjustViewBounds(true); 
    imageView.setCropToPadding(true); 
0

Sie sollten die android:scaleType zu Ihrem Image Attribut ändern. Wenn Sie die Bilder proportional anzeigen möchten, können Sie centerCrop verwenden. Wenn Sie die Bilder nicht proportional anzeigen möchten, können Sie verwenden.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="350dp" 
       android:layout_height="wrap_content" 
       android:background="@drawable/selector_button_grey" 
       android:clickable="true" 
       android:padding="5dp"> 

    <ImageView 
     android:id="@+id/image_selector" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:background="@color/black" 
     android:scaleType="fitXY" 
     android:src="@drawable/Nachos" /> 

    <TextView 
     android:id="@+id/image_selector_text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentStart="true" 
     android:layout_below="@+id/image_selector" 
     android:gravity="center_horizontal|center_vertical" 
     android:paddingBottom="5dp" 
     android:paddingLeft="5dp" 
     android:textSize="18sp"/> 

</RelativeLayout> 
+0

Ich brauche Verhältnis mantain. –

+0

Sie sollten 'centerCrop' in Ihrem Code setzen. – KeLiuyue

+0

Aber centerCrop wird das Bild zuschneiden. Ich möchte das Bild größer, in die Breite des relativen Layouts passen. –

0

Hoffe, das hilft! In meinem Fall funktioniert es gut.

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="350dp" 
    android:layout_height="match_parent" 
    android:background="@drawable/Nachos"> 
</RelativeLayout> 
0

Es gibt einige padding gesetzt auf der RelativeLayout können sie auch eine Ursache zu ImageView nicht berühren die Seiten RelativeLayout in Ihrem Layout sein: diese

entfernen:

android:padding="5dp" 

Und wenn Sie echte etwas Padding-Set auf Top wollen und Bottom aber NICHT auf der rechten und linken also, wenn Sie padding oben wollen und Bottom ADD diese:

android:paddingTop="5dp" 
android:paddingBottom="5dp" 

Und wenn Sie nicht möchten, Polsterung überhaupt nicht HINZUFÜGEN sie!

1

Da Ihr Relative Layout und Bildansicht haben beide Inhaltshöhe wickeln, damit Sie sie machen müssen passen Eltern und machen ScaleType fitXY ..

wie folgt Code:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="350dp" 
    android:layout_height="match_parent" 
    android:background="@drawable/selector_button_grey" 
    android:clickable="true" 
    android:padding="5dp"> 

<ImageView 
    android:id="@+id/image_selector" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:adjustViewBounds="true" 
    android:scaleType="fitXY" 
    android:background="@color/black" 
    android:src="@drawable/Nachos" 
    /> 

<TextView 
    android:id="@+id/image_selector_text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_below="@+id/image_selector" 
    android:gravity="center_horizontal|center_vertical" 
    android:paddingBottom="5dp" 
    android:paddingLeft="5dp" 
    android:textSize="18sp" /> 
</RelativeLayout>