web-dev-qa-db-de.com

Rahmen für eine Bildansicht in Android?

Wie kann ich einen Rand für ein ImageView setzen und dessen Farbe in Android ändern?

300
Praveen

Ich habe die folgende XML-Datei in den Hintergrund der Bildansicht als Zeichenbar gesetzt. Es klappt.

<?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 Android:background="@drawable/yourXmlFileName" zu deiner ImageView hinzufügen

520
Praveen

Nachfolgend ist der Code, den ich früher mit schwarzem Rand hatte. Beachten Sie, dass ich keine zusätzliche 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"/>
153
user609239

Dies ist ein alter Beitrag, den ich kenne, aber ich dachte, das könnte jemandem da draußen helfen.

Wenn Sie einen durchscheinenden Rahmen simulieren möchten, der die "feste" Farbe der Form nicht überlappt, verwenden Sie diesen in Ihrer XML-Datei. Beachten Sie, dass ich hier nicht das Tag "Strich" verwende, da es scheinbar immer die tatsächlich gezeichnete Form überlappt.

  <?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>
22
mdupls

ImageView in der 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 mit dem Namen border_image.xml, und es sollte sich in einem zeichnbaren Ordner befinden

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
 Android:shape="rectangle">
<gradient Android:startColor="#ffffff" 
Android:endColor="#ffffff"
Android:angle="270" />
<corners Android:radius="0dp" />
<stroke Android:width="0.7dp" Android:color="#b4b4b4" />
</shape>

wenn Sie dem Bildrand eine abgerundete Ecke geben möchten, können Sie eine Zeile in der Datei border.xml ändern

   <corners Android:radius="4dp" />
19
Ashish Saini

Fügen Sie einen Hintergrund hinzu, der wie res/drawables/background.xml gezeichnet werden kann:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <solid Android:color="@Android:color/white" />
  <stroke Android:width="1dp" Android:color="@Android:color/black" />
</shape>

Aktualisieren Sie den ImageView-Hintergrund in res/layout/foo.xml:

...
<ImageView
  Android:layout_width="wrap_content"
  Android:layout_height="wrap_content"
  Android:padding="1dp"
  Android:background="@drawable/background"
  Android:src="@drawable/bar" />
...

Schließen Sie die ImageView-Auffüllung aus, wenn Sie möchten, dass die Quelle über den Hintergrund gezeichnet wird.

2

Dies wurde oben verwendet, aber nicht ausschließlich erwähnt.

setCropToPadding(boolean)

If true, the image will be cropped to fit within its padding. 

Dadurch wird die ImageView-Quelle so angepasst, dass sie in den Hintergrund der Auffüllung passt.

Über XML kann es wie folgt erstellt werden,

Android:cropToPadding="true"
2
Atul O Holic

sie müssen eine background.xml in res/drawable dieses Codes erstellen

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="#FFFFFF" />
<corners Android:radius="6dp" />
<stroke
    Android:width="6dp"
    Android:color="@Android:color/white" />
<padding
    Android:bottom="6dp"
    Android:left="6dp"
    Android:right="6dp"
    Android:top="6dp" />
</shape>
1
Cabezas

Für diejenigen, die eine benutzerdefinierte Umrandung und Form von ImageView suchen. Sie können Android-Shape-Bildansicht verwenden

 image

Fügen Sie einfach compile 'com.github.siyamed:Android-shape-imageview:[email protected]' zu Ihrem build.gradle hinzu.

Und in Ihrem Layout verwenden.

<com.github.siyamed.shapeimageview.BubbleImageView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:src="@drawable/neo"
    app:siArrowPosition="right"
    app:siSquare="true"/>
0
Khemraj

In derselben XML, die ich als nächstes verwendet habe:

    <RelativeLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:background="#ffffff" <!-- border color -->
        Android:padding="3dp"> <!-- border width -->

        <ImageView
            Android:layout_width="160dp"
            Android:layout_height="120dp"
            Android:layout_centerHorizontal="true"
            Android:layout_centerVertical="true"
            Android:scaleType="centerCrop" />
    </RelativeLayout>
0
porquero

Fügen Sie zuerst die Hintergrundfarbe hinzu, die Sie als Farbe Ihres Rahmens verwenden möchten, und dann enter image description here

ändere das cropToPadding auf true und füge danach das padding hinzu.

Dann haben Sie Ihren Rand für Ihre Bildansicht.

0
Achintha Isuru

Ich fand es so viel einfacher, dies zu tun:

1) Bearbeiten Sie den Rahmen so, dass der Inhalt darin enthalten ist (mit dem 9patch-Werkzeug).

2) Platzieren Sie die ImageView in einer Linearlayout und legen Sie den Hintergrund oder die Farbe des Rahmens als Hintergrund für die Linearlayout fest. Wenn Sie den Rahmen so einstellen, dass der Inhalt in sich ist, befindet sich Ihre ImageView innerhalb des Rahmens (genau dort, wo Sie den Inhalt mit dem 9patch-Werkzeug festlegen).

0
noloman

Das Folgende ist meine einfachste Lösung für dieses langwierige Problem.

<FrameLayout
    Android:layout_width="112dp"
    Android:layout_height="112dp"
    Android:layout_marginLeft="16dp" <!-- May vary according to your needs -->
    Android:layout_marginRight="16dp" <!-- May vary according to your needs -->
    Android:layout_centerVertical="true">
    <!-- following imageView acts as the boarder which sitting in the background of our main container ImageView -->
    <ImageView
        Android:layout_width="112dp"
        Android:layout_height="112dp"
        Android:background="#000"/>
    <!-- following imageView holds the image as the container to our image -->
    <!-- layout_margin defines the width of our boarder, here it's 1dp -->
    <ImageView
        Android:layout_width="110dp"
        Android:layout_height="110dp"
        Android:layout_margin="1dp"
        Android:id="@+id/itemImageThumbnailImgVw"
        Android:src="@drawable/banana"
        Android:background="#FFF"/> </FrameLayout>

In der folgenden Antwort habe ich es gut genug erklärt, bitte schaut euch das auch an!

Ich hoffe, das wird jemand anderem da draußen helfen!

0
Randika Vishman

Rahmen erstellen

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

<?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 und @color/borderColor durch das, was Sie möchten, oder fügen Sie die entsprechende Abmessung/Farbe hinzu.

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 Android:cropToPadding="true" verwenden, sonst hat die definierte Polsterung keine Auswirkung. Verwenden Sie alternativ Android:padding="@dimen/borderThickness" in Ihrer ImageView, um dasselbe zu erreichen. Versuchen Sie Android:adjustViewBounds="true" zu verwenden, wenn der Rahmen das übergeordnete Element statt Ihrer ImageView umrahmt.

Ändern Sie die Farbe des Rahmens

Die einfachste Möglichkeit, die Rahmenfarbe 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

oder

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

Vergessen Sie nicht, Ihr newColor zu definieren.

0
SuperSmartWorld