如何在Android中为ImageView
设置边框并更改其颜色?
我将下面的xml设置为ImageView的背景,作为Drawable。它能正常工作。
<?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>
然后将android:background="@drawable/yourXmlFileName"
添加到你的ImageView
中。
ImageView
中添加android:background="@drawable/yourXmlFileName"
。 - Mithun Sreedharan以下是我用来创建黑色边框的代码。请注意,我没有使用额外的XML文件来创建边框。
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/red_minus_icon"
android:background="#000000"
android:padding="1dp"/>
android:scaleType="centerCrop"
来调整图片大小时,这种方法不起作用。 - Tom NaessensscaleType="centerCrop"
,请确保同时添加 cropToPadding="true"
。 - Adam Johns在xml文件中使用ImageView
<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" />
将下面的代码保存为border_image.xml
,并将其放置在drawable文件夹中。
<?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>
如果您想将图像的边框变为圆角,则可以更改border.xml文件中的一行代码。
<corners android:radius="4dp" />
ImageView.setImageBitmap(photoBmp)
时,我没有看到任何奇怪的东西。 - Someone Somewhere我知道这是一个旧帖子,但我认为它可能会帮助到某些人。
如果你想模拟一个半透明边框,而不重叠形状的“实心”颜色,则在你的xml中使用以下内容。请注意,我完全没有使用"stroke"标签,因为它似乎总是会重叠实际绘制的形状。
<?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>
使用 Material Design 和新的 ShapeableImageView 小部件,您可以轻松地创建具有边框的图像,使用 strokeColor
和 strokeWidth
属性即可。这种方法简单,并且不需要创建任何额外的 XML 文件。
<com.google.android.material.imageview.ShapeableImageView
android:layout_width="200dp"
android:layout_height="200dp"
app:strokeColor="@color/black"
app:strokeWidth="2dp"
app:srcCompat="@drawable/sample_image" />
上述代码创建了一个宽度为2dp的黑色边框。
如果您想在圆形图像周围添加描边,可以使用shapeAppearanceOverlay
属性。这允许您使用提供的形状(在此情况下为圆形)绘制位图。有关更多详细信息,请查看下面的代码:
<com.google.android.material.imageview.ShapeableImageView
android:layout_width="200dp"
android:layout_height="200dp"
app:shapeAppearanceOverlay="@style/circleImageView"
app:srcCompat="@drawable/sample_image"
app:strokeColor="@color/black"
app:strokeWidth="2dp" />
将以下代码添加到您的styles.xml
文件中:
<!-- Circle Shape -->
<style name="circleImageView" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">50%</item>
</style>
确保你的应用程序扩展了 Material Design 主题,以便使用 ShapeableImageView
。
在drawable文件夹中创建一个名为"frame_image_view.xml"的xml文件,并添加以下内容:
<?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>
将@dimen/borderThickness
和@color/borderColor
替换为您想要的内容,或添加相应的dimen / color。
将Drawable作为背景添加到您的ImageView中:
<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" />
如果你想要定义的padding有效,你需要使用android:cropToPadding="true"
。或者在ImageView中使用android:padding="@dimen/borderThickness"
来达到同样的效果。
如果边框围绕父级而不是ImageView,请尝试使用android:adjustViewBounds="true"
。
在代码中更改边框颜色最简单的方法是使用tintBackground
属性。
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED); // changes border color to red
或者
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(getColorStateList(R.color.newColor));
不要忘记定义你的newColor
。
添加一个背景Drawable,比如res/drawables/background.xml:
<?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>
在res/layout/foo.xml中更新ImageView的背景:
...
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp"
android:background="@drawable/background"
android:src="@drawable/bar" />
...
这个术语在之前已经使用过,但并不是唯一的名称。
setCropToPadding(boolean);
ImageView
源适合添加到其背景中的填充内部。android:cropToPadding="true"
您需要在res/drawable中创建一个background.xml文件,代码如下:
<?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>
compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
添加到您的 build.gradle
中即可。<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"/>