当前位置: 首页 > 知识库问答 >
问题:

Android ImageView缩放较小的图像到宽度,具有灵活的高度,不会裁剪或失真

嵇浩淼
2023-03-14

经常问,从不回答(至少不是以可复制的方式)。

我有一个图像视图,图像比视图小。我想按屏幕宽度缩放图像,并调整ImageView的高度,以反映图像的比例正确的高度。

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

这导致图像以其原始大小为中心(比屏幕宽度小),边缘在侧面。不好。

所以我补充说

android:adjustViewBounds="true" 

同样的效果,不好。我补充说

android:scaleType="centerInside"

一样的效果,不好。我将center更改为FitCenter。一样的效果,不好。我将centerIn更改为centerCrop

android:scaleType="centerCrop"

现在,最后,图像缩放到屏幕的宽度——但是在顶部和底部裁剪!所以我把centerCrop改成了FitXY

android:scaleType="fitXY"

现在,图像缩放到屏幕宽度,但不在y轴上缩放,从而导致图像失真。

删除android:adjustViewBounds=“true”无效。正如其他地方建议的那样,添加一个android:layou-gravity,同样没有效果。

我试过其他的组合,但没有用。那么,请问有谁知道:

您如何设置ImageView的XML来填充屏幕的宽度,缩放较小的图像来填充整个视图,以其宽高比显示图像而不失真或裁剪?

编辑:我还尝试设置任意数字高度。这仅对centerCrop设置有效。它将根据视图高度垂直扭曲图像。

共有3个答案

公冶龙野
2023-03-14

在XML布局标准中没有可行的解决方案

对动态图像大小做出反应的唯一可靠方法是在代码中使用LayoutParams

令人失望。

翟宏放
2023-03-14

我和你有同样的问题。在尝试了30分钟不同的变体后,我用这种方法解决了这个问题。它为您提供了灵活的高度和宽度,可根据父级宽度进行调整

<ImageView
            android:id="@+id/imageview_company_logo"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:adjustViewBounds="true"
            android:scaleType="fitCenter"
            android:src="@drawable/appicon" />
姚臻
2023-03-14

我已经解决了这个问题,通过创建一个java类,你包括在您的布局文件:

public class DynamicImageView extends ImageView {

    public DynamicImageView(final Context context, final AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
        final Drawable d = this.getDrawable();

        if (d != null) {
            // ceil not round - avoid thin vertical gaps along the left/right edges
        final int width = MeasureSpec.getSize(widthMeasureSpec);
        final int height = (int) Math.ceil(width * (float) d.getIntrinsicHeight() / d.getIntrinsicWidth());
            this.setMeasuredDimension(width, height);
        } else {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
}

现在,您可以通过将您的类添加到布局文件来使用它:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <my.package.name.DynamicImageView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:src="@drawable/about_image" />
</RelativeLayout>
 类似资料:
  • 问题内容: 我正在寻找创建尺寸为100px x 100px的缩略图。我看过很多文章解释了这些方法,但是如果要保持尺寸比例,大多数结果将是width!= height。 例如,我有一个450px x 350px的图像。我想裁剪到100px x 100px。如果我要保持该比率,我最终将得到100px x 77px。当我在行和列中列出这些图像时,这很难看。但是,没有尺寸比例的图像也会看起来很糟糕。 我看

  • 本文向大家介绍裁剪画布/导出具有一定宽度和高度的HTML5画布,包括了裁剪画布/导出具有一定宽度和高度的HTML5画布的使用技巧和注意事项,需要的朋友参考一下 为此,创建一个临时画布以在当前画布上进行绘制。之后,在临时画布上使用toDataUrl()方法-

  • 我目前正在为一家公司做一个移动登陆页面。这是一个真正基本的布局,但在标题下方有一个产品的图像,它将永远是100%的宽度(设计显示它总是从边到边)。根据屏幕的宽度,图像的高度显然会相应地调整。我最初用一个img(CSS宽度为100%),它工作得很好,但我意识到我希望使用媒体查询来为基于不同分辨率的不同图像提供服务-例如,同一图像的小、中、大版本。我知道你不能用CSS改变img src,所以我想我应该

  • 我希望在纵横比中限制裁剪选择区域的最小宽度和高度,以便用户不能拍摄图像的非常小的部分。 例如,用户上传的图像宽度为602px,高度为400px,在这种情况下,最小裁剪选择区域是什么? 根据谷歌最小可裁剪选择区域宽度=574px和高度=323px用户不能使其小于这个尺寸。 这是什么逻辑? 仅供参考以上逻辑我正在寻找作物封面照片像谷歌加 谢啦

  • 我已经尝试编辑默认图像大小的缩略图在wordpress通过设置 我还多次重新生成缩略图,删除并重新添加它们,但它们似乎仍然不会从300变到300。 查看源代码时,缩略图解析为: img width=“300”height=“300”src=” 完全忽略通过管理员cp设置的维度。 当我从自定义模板更改为2122时,尺寸从300更改为288px。 这些维度是从哪里被拉出来的?它开始让我发疯了。 提前谢

  • 我曾读到,Facebook开放图中与给定URL关联的图像必须大于50 x 50 然而,当我们运行Facebook对象调试器时,我们得到了以下警告: “Tiny og:image:og:image引用的所有图像在两个维度上都必须至少为200px。请检查给定url中标记为og:image的所有图像,并确保其符合最低规格。” 我们的URLhttp://www.famousbirthdays.com/pe