如何为ImageView设置边框并在Android中更改其颜色?

评论

我有一个更改ImageView颜色的答案,希望能对您有所帮助。

#1 楼

我将以下xml设置为“图像视图”的背景为“可绘制”。

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

评论


然后将android:background =“ @ drawable / yourXmlFileName”添加到ImageView

– Mithun Sreedharan
2011年4月7日在8:02

边框在左边和右边都可以使用,但是对于顶部和底部,它将边框填充到顶部。

–莫里斯
2011年7月22日在8:48

哦,很好,这也是我想要的。记住要为ImageView设置填充。

–emeraldhieu
2012年8月15日下午4:55

@Maurice可以将cropToPadding设置为true。

– MikkoP
13年8月7日在16:21

不要忘记设置cropToPadding =“ true”

–兰德里
2015年6月5日,11:33

#2 楼

以下是我以前具有黑色边框的代码。请注意,我没有使用额外的xml文件作为边框。

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


评论


是的..它看起来像一个边界。但是,当您使用具有透明背景的可绘制图像时,它将无法正确显示带有边框的图像。只要有透明色,它就会显示黑色。因此,您的答案不是最佳方法。

–普拉文
2011年5月19日在9:09

是的但是您没有创建另一个xml文件的边界。

–user609239
2011年6月8日在7:16

当您使用android:scaleType =“ centerCrop”调整图片大小时,此方法不起作用。

– Silox
13年2月23日在21:04

这很糟糕,因为它会产生不必要的透支

–杰伊·索耶(Jay Soyer)
13年4月19日在20:13

@Silox用于scaleType =“ centerCrop”,请确保还添加cropToPadding =“ true”

–亚当·约翰斯(Adam Johns)
16年4月28日在13:07

#3 楼

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的代码保存在应绘制的文件夹中

<?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" />


评论


请注意,如果图像是动态设置的,则需要使用代码再次设置边框,否则图像将超出边框。

–Rob85
16-10-20在14:43

当我使用`ImageView.setImageBitmap(photoBmp)'时我没有看到任何奇怪的地方

–某处有人
20年7月6日在23:40

#4 楼

我知道这是一篇旧文章,但是我认为这可能会对那里的人有所帮助。

如果您要模拟不与形状的“纯色”重叠的半透明边框,请使用在您的xml中。请注意,我这里根本不使用“笔画”标记,因为它似乎总是与实际绘制的形状重叠。

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


评论


我也很喜欢,但是如果您将外部边缘设置得太小,则角是空白的。它适用于2dp及更高版本。

– John Stack
2012年9月18日13:19

这种方法的好处是它允许圆角。如果您不希望上一个答案的边框重叠,请在ImageView标签中添加填充。该方法的缺点是如果使用半透明背景,边框将渗入图像区域。因此,选择前一种方法是因为我比半圆角更喜欢半透明的背景。

– Leo Landau
2013年9月12日在18:09

#5 楼

创建边框

在可绘制文件夹中创建具有以下内容的xml文件(例如“ frame_image_view.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以及任何您想要的颜色或添加相应的尺寸/颜色。

将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" />


您必须请使用android:cropToPadding="true",否则定义的填充无效。另外,也可以在ImageView中使用android:padding="@dimen/borderThickness"来实现相同的效果。
如果边框是父级而不是ImageView的边框,请尝试使用android:adjustViewBounds="true"

更改边框的颜色

在代码中更改边框颜色的最简单方法是使用tintBackgound属性。

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

评论


笔触看起来不错-但是,框架和图像之间有透明的间隙(顶部和底部)。

–某处有人
20年7月6日在22:43

#6 楼

添加像res / drawables / background.xml这样的背景Drawable:

<?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" />
...


如果要让src在背景上绘制,请排除ImageView填充。

#7 楼

上面已使用过它,但并未专门提及。

setCropToPadding(boolean);


如果为true,则图像将被裁剪以适合其填充。

这将使ImageView源适合填充到添加到其背景中的填充内。

通过XML,可以如下所示进行操作-

android:cropToPadding="true"


#8 楼

您必须在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>


#9 楼

对于那些正在搜索ImageView的自定义边框和形状的用户。您可以使用android-shape-imageview



只需将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"/>


#10 楼

首先添加所需的背景颜色作为边框颜色,然后


将cropToPadding更改为true,然后添加填充。

然后您将拥有imageView的边框。

#11 楼

我几乎放弃了。

这是我使用滑行加载图像的条件,请参见此处有关圆角变换的详细滑行问题,以及此处的

我也一样我的ImageView的属性,每个人都在这里1,这里2和这里3

android:cropToPadding="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter"`
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/path_to_rounded_drawable"


但仍然没有成功。

经过一段时间的研究,使用此SO答案中的foreground属性给出结果android:foreground="@drawable/all_round_border_white"

不幸的是,它给了我“不好的”边框角,如下图所示:



#12 楼

只需在您的ImageView中添加以下代码即可:
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <solid
        android:color="@color/white"/>

    <size
        android:width="20dp"
        android:height="20dp"/>
    <stroke
        android:width="4dp" android:color="@android:color/black"/>
    <padding android:left="1dp" android:top="1dp" android:right="1dp"
        android:bottom="1dp" />
</shape>


#13 楼

我发现这样做非常容易:

1)编辑框架以将内容包含在内部(使用9patch工具)。

2)将ImageView放置在Linearlayout内,然后将所需的框架背景或颜色设置为Linearlayout的背景。当您将框架设置为内部包含内容时,您的ImageView将位于框架内部(使用9patch工具设置内容的右侧)。

#14 楼

以下是解决这个冗长麻烦的最简单的方法。

<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>


在下面的答案中,我对它的解释已经足够好,请也对此进行解释! >
我希望这对外面的人有帮助!

#15 楼

在同一xml中,我接下来使用了:

    <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>


#16 楼

您可以在Andorid Studio中使用9补丁制作边框!
我正在寻找解决方案,但是我没有找到任何解决方案,所以我跳过了该部分
然后我去了Firebase资产的google图片,却意外地发现了他们使用9patch

以下链接:https://developer.android.com/studio/write/draw9patch
您只需要拖动边缘所在的地方
就像博德边缘团结一致

#17 楼


将以下代码添加到形状中:
<gradient
    android:angle="135"
    android:endColor="#FF444444"
    android:centerColor="#FFAAAAAA"
    android:startColor="#FFFFFFFF"/>

évoila,您有一个(或多或少)凹进的边框,光源设置为左上。摆弄位图的大小(相对于imageview的大小,在示例中,我使用了200dp x 200dp imageview和192dp x 192dp的位图,边角的半径为28dp),填充和笔触以获得最佳结果。切换结束和开始颜色以产生倾斜效果。
有关此位图的圆形形状,请参见此链接。您还必须在xml形状中设置圆角。
这是您在图像中看到的形状的完整代码(保存在res / drawable中,例如border_shape.xml):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="135"
        android:endColor="#FF444444"
        android:centerColor="#FFAAAAAA"
        android:startColor="#FFFFFFFF"/>
    <!--
    <stroke
        android:width="2dp"
        android:color="@color/your_color"/>
    -->
    <padding
        android:bottom="2dp"
        android:left="2dp"
        android:right="2dp"
        android:top="2dp"/>
    <corners
        android:radius="30dp"/>
</shape>

并像这样在您的imageview中调用它:
android:scaleType="center"    
android:background="@drawable/border_shape"
android:cropToPadding="true"
android:adjustViewBounds="true"