382 Stimmen

Rahmen für eine Bildansicht in Android?

Wie kann ich einen Rahmen für eine ImageView und seine Farbe in Android ändern?

627voto

Praveen Punkte 88704

Ich setze das untenstehende Xml auf den Hintergrund der Bildansicht als Drawable. Es funktioniert.

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF" />
    <stroke android:width="1dp" android:color="#000000" />
    <padding android:left="1dp" android:top="1dp" android:right="1dp"
        android:bottom="1dp" />
</shape>

Und dann hinzufügen android:background="@drawable/yourXmlFileName" zu Ihrem ImageView

175voto

user609239 Punkte 3318

Im Folgenden finden Sie den Code, den ich verwendet habe, um einen schwarzen Rand zu erhalten. Beachten Sie, dass ich keine extra xml-Datei für den Rand verwendet habe.

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/red_minus_icon"
    android:background="#000000"
    android:padding="1dp"/>

36voto

Ashish Saini Punkte 2250

ImageView in xml-Datei

<ImageView
            android:id="@+id/myImage"
            android:layout_width="100dp"
            android:layout_height="100dp"

            android:padding="1dp"
            android:scaleType="centerCrop"
            android:cropToPadding="true"
            android:background="@drawable/border_image"

            android:src="@drawable/ic_launcher" />

Speichern Sie den folgenden Code unter dem Namen border_image.xml und es sollte sich im Ordner "drawable" befinden

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <gradient
        android:angle="270"
        android:endColor="#ffffff"
        android:startColor="#ffffff" />

    <corners android:radius="0dp" />

    <stroke
        android:width="0.7dp"
        android:color="#b4b4b4" />
</shape>

Wenn Sie den Rand des Bildes mit abgerundeten Ecken versehen möchten, können Sie eine Zeile in der Datei border.xml ändern

<corners android:radius="4dp" />

25voto

mdupls Punkte 1992

Ich weiß, dass dies ein alter Beitrag ist, aber ich dachte, er könnte vielleicht jemandem da draußen helfen.

Wenn Sie einen durchscheinenden Rand simulieren möchten, der die "einfarbige" Farbe der Form nicht überlagert, dann verwenden Sie dies in Ihrer Xml. Beachten Sie, dass ich das "stroke"-Tag hier überhaupt nicht verwende, da es die eigentliche gezeichnete Form immer zu überlappen scheint.

  <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#55111111" />

            <padding
                android:bottom="10dp"
                android:left="10dp"
                android:right="10dp"
                android:top="10dp" />

            <corners android:radius="5dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle" >
            <padding
                android:bottom="5dp"
                android:left="5dp"
                android:right="5dp"
                android:top="5dp" />

            <solid android:color="#ff252525" />
        </shape>
    </item>
</layer-list>

6voto

SuperSmartWorld Punkte 91

Rahmen erstellen

Erstellen Sie eine xml-Datei (z.B. "frame_image_view.xml") mit folgendem Inhalt in Ihrem drawable-Ordner:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:width="@dimen/borderThickness"
        android:color="@color/borderColor" />
    <padding
        android:bottom="@dimen/borderThickness"
        android:left="@dimen/borderThickness"
        android:right="@dimen/borderThickness"
        android:top="@dimen/borderThickness" />
    <corners android:radius="1dp" /> <!-- remove line to get sharp corners -->
</shape>

Ersetzen Sie @dimen/borderThickness y @color/borderColor mit dem, was Sie wollen, oder fügen Sie entsprechende Dimensionen / Farbe.

Fügen Sie das Drawable als Hintergrund zu Ihrer ImageView hinzu:

<ImageView
        android:id="@+id/my_image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/frame_image_view"
        android:cropToPadding="true"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter" />

Sie müssen Folgendes verwenden android:cropToPadding="true" , andernfalls hat die definierte Auffüllung keine Wirkung. Alternativ können Sie auch android:padding="@dimen/borderThickness" in Ihrer ImageView, um das Gleiche zu erreichen. Wenn der Rahmen den Parent statt die ImageView einrahmt, versuchen Sie android:adjustViewBounds="true" .

Farbe der Umrandung ändern

Der einfachste Weg, die Farbe des Rahmens im Code zu ändern, ist die Verwendung des Attributs tintBackgound.

ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED); // changes border color to red

o

ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(getColorStateList(R.color.newColor));

Vergessen Sie nicht, Ihre newColor .

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