Wie kann ich einen Rahmen für eine ImageView
und seine Farbe in Android ändern?
Antworten
Zu viele Anzeigen?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
.
Fügen Sie ein Hintergrund-Drawable wie res/drawables/background.xml hinzu:
<?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 Hintergrund der ImageView 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 das ImageView-Padding aus, wenn Sie möchten, dass das src über den Hintergrund gezeichnet wird.
Dieser Begriff wurde bereits weiter oben verwendet, aber nicht exklusiv erwähnt.
setCropToPadding(boolean);
Si wahr wird das Bild so beschnitten, dass es in seinen Rahmen passt.
Dadurch wird die ImageView
Quelle in die dem Hintergrund hinzugefügte Füllung zu passen.
Über XML kann dies wie folgt geschehen
android:cropToPadding="true"
Für diejenigen, die benutzerdefinierte Rahmen und Form von ImageView suchen. Sie können verwenden Android-Formbild-Ansicht
Einfach hinzufügen compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
zu Ihrem build.gradle
.
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"/>
Sie müssen eine background.xml in res/drawable mit diesem Code 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>