在Android中去除ImageView边框

3
我正在制作一个使用卡片来显示信息的应用程序,并且我想在卡片的左侧放置一张图片。我遇到的问题是,我插入到左侧的ImageView出现了某些原因导致四周都有填充的情况。
在网上搜索后,我发现许多stackoverflow上的帖子都在问同样的问题,并且他们都被告知使用以下代码来解决问题:
android:adjustViewBounds="true"

并且可以在xml中的ImageView中简单地添加此内容。我尝试了这个,但是填充仍然存在。我已将图像视图的背景颜色设置为酸橙绿色,以说明填充区域。

以下是我的卡片XML代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_margin="2dp"
    android:clickable="true"
    android:foreground="?android:attr/selectableItemBackground"
    card_view:cardCornerRadius="5dp"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/drinkImage"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:background="#00FF00"
            android:gravity="left"
            />

        <TextView
            android:padding="8dp"
            android:id="@+id/drinkName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="24sp"
            android:layout_toRightOf="@+id/drinkImage"
            />

        <TextView
            android:padding="8dp"
            android:id="@+id/drinkDesc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/drinkName"
            android:layout_toRightOf="@+id/drinkImage"
            />

    </RelativeLayout>
</android.support.v7.widget.CardView>

这是我在屏幕上看到的内容: http://i.stack.imgur.com/bVaR4.png enter image description here

1
你尝试过使用android:scaleType属性来调整你的ImageView吗?android:scaleType="centerCrop"或许可以解决问题。 - Pavel Dudka
你尝试过使用android:layout_width="100dp"android:layout_height="100dp"代替match_parent吗?并且尝试移除android:foreground吗? - T D Nguyen
android:scaleType设置为不同的值并没有改变任何东西,即使手动设置布局的宽度和高度,甚至超过100dp的值也是如此。我真的不确定该怎么处理android:foreground - mithunm93
边框是否实际上是图像的一部分?即 PNG 图像边缘周围的一条透明像素带。 - samgak
不,我确保过了,并尝试了多张不同的图片,每次都得到相同的边框。 - mithunm93
2个回答

1
好的,原来我是通过右键点击drawable/并点击新建->图像资产来添加图像资产到项目中的。我没有意识到这会裁剪和调整图片大小,因为我显然不知道图像资产创建器的正确用法。
要将.PNG文件添加到项目中,我只需从Finder(Mac上相当于Windows资源管理器)复制图像文件并将它们粘贴到Android Studio中的drawable文件夹中,一切都完美解决了。这是一个新手错误!

1
绿色的“边框”不是边框,而是你使用android:background="#00FF00"设置的ImageView的背景。你的图片会在ImageView上绘制。图片的比例与ImageView的宽度和高度不匹配,或者图片的宽度或高度小于ImageView的宽度或高度。在这种情况下,ImageView的默认行为是将图像居中显示在ImageView中。因此你看到了空白。你可以使用android:scaleType指定行为。请参阅官方文档。否则,你可以调整ImageView的宽度和高度以匹配图片的大小。
更新: 哦,对不起,我没有注意到你正在使用CardView
根据文档,这是设计好的:
由于圆角裁剪的昂贵性,在L之前的平台上,CardView不会裁剪与圆角相交的子元素。相反,它会添加填充来避免这种相交(请参见setPreventCornerOverlap(boolean)以更改此行为)。

查看 CardView 文档 获取更多信息。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - mithunm93
我使用的图像非常大,不确定为什么它会缩小并故意在周围添加边框。 - mithunm93
ImageView和原始图像的宽高比是否相同?设置android:scaleType="fitXY"(完全填充ImageView的宽度和高度,但图像将被拉伸并可能看起来奇怪)或使用android:scaleType="centerCrop"(图像将被裁剪以适应ImageView,但一些像素将不会显示,因为它们被裁剪以填充ImageView的宽度和高度)。 - sockeqwe
这很有趣,安卓确实这样做了,但文档说明如下:“在API 21及以上版本上设置此值没有任何效果,除非您已启用兼容填充。”我正在使用API 21,所以一开始就不应该发生这种情况,这可能与我使用的AppCompat主题有关吗?如果不是,如何启用/禁用兼容填充? - mithunm93

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接