如何在 Imageview 中显示边框?

Posted

技术标签:

【中文标题】如何在 Imageview 中显示边框?【英文标题】:How To Display Border To Imageview? 【发布时间】:2011-08-16 00:22:41 【问题描述】:

朋友们如何给Imageview显示边框?

我想像移动图库一样显示所有图像都带有边框。

请给我 ans 感谢您的提前....

【问题讨论】:

【参考方案1】:

您可以为ImageView 的“边框”(实际上是背景)创建资源(图层可绘制xml),并在theme 中声明ImageView 的背景资源是可绘制xml。

如果您需要根据ImageView 的状态(focusedselected 等)更改此“边框”,那么您应该创建更多图层可绘制对象,并将它们组合到一个选择器中xml(状态可绘制)。 然后在您的主题中,您应该将ImageView 的背景设置为selector.xml

更新 以下是如何为图像指定简单边框的示例,这将导致

你必须

    创建一个新的图层可绘制文件 (image_border.xml), 修改/创建您的styles.xml 文件 修改/创建您的colors.xml 文件 修改您的布局 xml 文件(或您的代码)以将样式应用于 ImageView

res/drawable/image_border.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <gradient android:angle="90" 
                android:startColor="@color/image_border_start" 
                android:centerColor="@color/image_border_center"
                android:endColor="@color/image_border_end" />
        </shape>
    </item>
    <item android:top="2dp" android:left="2dp" 
        android:right="2dp" android:bottom="2dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/default_back_color" />
        </shape>
    </item>
</layer-list>

res/values/styles.xml 添加以下行:

<style name="myImageView">
    <!-- 3dp so the background border to be visible -->
    <item name="android:padding">3dp</item>
    <item name="android:background">@drawable/image_border</item>
    <item name="android:scaleType">fitCenter</item>
</style>

res/values/colors.xml 添加以下行:

<color name="image_border_start">#40990000</color>
<color name="image_border_end">#FF660000</color>
<color name="image_border_center">#FFFF3333</color>

最后在 layout xml 中指定 ImageView 的样式:

<ImageView android:id="@+id/my_image" 
    android:layout_ android:layout_
    android:src="@drawable/efteling"
    style="@style/myImageView" />

【讨论】:

如果边框变厚,这将掩盖图像视图。有没有办法不覆盖它?【参考方案2】:

您可以将此 XML 文件用作可绘制文件而不是多个文件,但是这 文件放在drawable文件夹中。在 ImageView 中使用这个 XML 文件作为 背景可绘制,例如:android:background="@drawable/following code file name".

希望对你有帮助。

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

【讨论】:

【参考方案3】:

我尝试了上述所有解决方案,但它们都不适合我! 所以我想出了一个简单的解决方案! :-)

我记得我在下面的article 中读到过有关 Android 的 FrameLayout 的信息,说它可以帮助我们按照添加它们的顺序将 UI 元素堆叠在一起。

解决方案:

<FrameLayout
    android:layout_
    android:layout_
    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_
        android:layout_
        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_
        android:layout_
        android:layout_margin="1dp"
        android:id="@+id/itemImageThumbnailImgVw"
        android:src="@drawable/banana"
        android:background="#FFF"/>
</FrameLayout>

预览:

就是这样。你会得到如下类似 imageView!

优点和缺点:

我认为这是一种在其他任何地方都可以使用的非常简单的解决方案,而且您所做的所有事情都集中在一个地方,因此更容易修改它。但是我不喜欢添加两个 ImageView。

【讨论】:

以上是关于如何在 Imageview 中显示边框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NSArray 的 cell.imageview.image 中显示图像?

如何为图像添加边框而不是图像视图?

UIButton ImageView 仅显示颜色填充

android如何在imageview控件上绘制点

如何仅显示角边框?

使用 Image Picker 后图像未显示在 ImageView 中