Wrap Content ImageView 显示全尺寸图片

Posted

技术标签:

【中文标题】Wrap Content ImageView 显示全尺寸图片【英文标题】:Wrap Content ImageView display full size of image 【发布时间】:2017-05-10 19:21:12 【问题描述】:

我在android中使用imageview,当我将图像放入imageview时,使用属性wrap_content作为高度和宽度。图像看起来太大了,因为它们是真实大小的,或者如果我拍摄小图像,它们会变得模糊

代码


         <LinearLayout android:layout_
        android:layout_
        android:layout_below="@id/showhide"
        android:layout_marginRight="20sp"
        android:layout_marginLeft="20sp"
        android:layout_marginTop="10sp"
        android:padding="5sp"
        android:weightSum="4"
        >

        <!-- delivery intimation-->
        <LinearLayout android:layout_
            android:layout_
            android:id="@+id/layout_d_i"
            android:orientation="vertical"
            android:gravity="center_horizontal"
            android:layout_weight="1"
            android:weightSum="2"


            >
            <ImageView android:layout_
                android:layout_
                android:layout_weight="0.5"
                android:src="@drawable/delivintimation"
                android:id="@+id/delivery_intimation"
                android:layout_centerInParent="true"
                android:layout_gravity="center"
                android:layout_marginBottom="10sp"

                />

            <TextView android:layout_
                android:layout_
                android:text="Delivery Intimation"
                android:gravity="center"
                android:maxLines="100"
                android:singleLine="false"
                android:layout_below="@id/delivery_intimation"
                android:textSize="12sp"
                android:textColor="@android:color/black"
                />

        </LinearLayout>
          </LinearLayout>

【问题讨论】:

根据需要自定义高度和宽度。 给出你的xml代码。 如果你想在列表或 recyclerview 中显示图像,那么只需使用 75dp * 75dp What's the difference between fill_parent and wrap_content?的可能重复 在添加到项目之前检查图像大小,使用小图像小尺寸,使用所有可绘制文件夹添加图像,这样您就不会得到模糊的图像。 【参考方案1】:

使用 android:scaleType="centerInside"

【讨论】:

【参考方案2】:

您可以通过编程方式手动指定宽度和高度

<ImageView   android:layout_
android:layout_
android:src="@drawable/notes"
android:id="@+id/iv_notes"
android:scaleType="fitXY"/>

scaleType-- fitXY 将压缩并适合 imageview 中的所有图像 scaleType-- centerCrop 将图像裁剪为图像视图大小

如果你不想硬编码宽度和高度,你必须创建不同的可绘制文件夹并将不同分辨率的图像放在不同的文件夹中,可绘制文件夹的示例是

 drawable-ldpi
 drawable-mdpi
 drawable-hdpi
 drawable-xhdpi
 drawable-xxhdpi
 drawable-xxxhdpi

【讨论】:

【参考方案3】:

您是否尝试过使用android:scaleType 属性?

例子:

android:scaleType="centerCrop"

此属性使用许多其他值,例如“fitXY”、“center”、“centerInside”等。试试这个

【讨论】:

【参考方案4】:

使用 LinearyLayout 包装你的 ImageView 和另一个不可见的 View,并将 layout_weight 设置为 0.3 或 0.5 等,然后 ImageView 将根据你的大小。

这是一个示例,展示如何将图像设置为屏幕大小的一半

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_
              android:layout_>
    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_weight="0.5"
        android:background="#ff0000"
        >
        <ImageView
            android:layout_
            android:layout_
            android:src="@drawable/your_image"
            android:adjustViewBounds="true"
            />
    </RelativeLayout>
    <View
        android:layout_
        android:layout_
        android:layout_weight="0.5"
        android:background="#00ff00"
        />
</LinearLayout>

如果你想把你的图片放在屏幕的中心,你可以使用同样的想法并设置适当的权重来实现你的目标

【讨论】:

如果您没有正确答案,请发表评论【参考方案5】:

在 xml 中使用 src 而不是背景 请给xml看看你是如何实现的

【讨论】:

【参考方案6】:

imageview 上使用固定大小的宽度和高度。

<ImageView
    android:layout_
    android:layout_
    android:id="@+id/imageView"
    android:src="@drawable/image"
    android:scaleType="fitXY"/>

【讨论】:

【参考方案7】:

您使用的代码给出了正确的结果:您使用了 LinearLayout 并使用了权重。权重将根据屏幕分辨率进行划分。只需删除 LinearLayout 并改用 Relativelayout 即可。接下来删除图像的所有权重并将其属性设置为 wrap_content。如果您想提供完全适合您的屏幕宽度的图像,请以编程方式进行。

 DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
int desiredWidth=width/2;
yourView.setHeight(desiredWidth);

如果这不是您的要求,那么在您拥有这些图像的 RelativeLayout 中。赋予属性。 android:alignParentRight="true" 用于一张图片,android:alignParentLeft="true" 用于另一张图片并设置边距。

【讨论】:

最初我使用了相同的相对布局,但我使用的图像太大,所以我不适合查看 所以试试我告诉你的第二种方法。只需放置 wrap_content 并进行对齐。

以上是关于Wrap Content ImageView 显示全尺寸图片的主要内容,如果未能解决你的问题,请参考以下文章

图像在 ImageView 中按大小扭曲

安卓ImageView的src路径drawable在哪?图片显示不出来

具有 layout_height="wrap_content" 的 android XML 布局中的 ImageView 具有顶部和底部填充

动态的添加ImageView到LinearLayout中并居中显示

Google Ads MediaView在显示图片时未正确调整高度以适应wrap_content

ImageView使边框大于图像