可绘制图像不按屏幕密度缩放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可绘制图像不按屏幕密度缩放相关的知识,希望对你有一定的参考价值。

我有一个ImageView,它是ListItemView的一部分,假设它将显示在ListView中。没有图像,listview的每个项目都需要较少的高度。这在所有屏幕上都是一致的,因为它们都具有相同的高度。但是,在其中一个活动中,我需要在listview项目中显示图像,这总是会增加该活动的每个项目的大小。我在res> drawable> family> family(hdpi),family(mdpi),family(xhdpi),family(xxhdpi),fmaily(xxxhdpi)下有正确的文件夹结构

因此每个图像具有基于屏幕密度的5个版本。

我的布局文件中有以下内容:

<ImageView
        android:id="@+id/image"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="right|center"/>

我在Java代码中设置图像:

ImageView imageView = listItemView.findViewById(R.id.image);
imageView.setImageResource(word.getImage());

但是,无论我选择什么分辨率,图像大小似乎总是相同,它会影响ListView中整个ListItemView的大小。

没有图像的ListView项的大小:

Without ImageView

使用ImageView:

enter image description here

您可能已经注意到具有灰色背景的ListView项目的高度更改。这是正常的吗?我不想修复图像的大小。我想根据屏幕分辨率进行缩放,但是,它不应该扭曲ListView项目的整体高度。无论屏幕密度如何,此图像都保持不变。为什么它不会自动缩放并适合ListView项目。

这是正常的还是有任何解决方法?

答案

您可以通过设置android:layout_height="wrap_content"然后相应地设置宽度比例来确定Image可以使用多少空间(以便您的layout_weight正常工作)。

您可以更改布局以强制ImageView到您喜欢的高度,并使用scaleTypeto获得首选缩放。在这个例子中,我使用了fitCenter,但还有其他可以选择(例如,fitXY)。

通过使用尺寸限定符dp,图像将自动“缩放”屏幕密度,因为dp是与密度无关的像素,这意味着它将随着屏幕密度而变化。

<ImageView
        android:id="@+id/image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:scaleType="fitCenter"
        android:layout_weight="1"
        android:layout_gravity="right|center"/>

以上是关于可绘制图像不按屏幕密度缩放的主要内容,如果未能解决你的问题,请参考以下文章

如何防止android层可绘制形状(例如圆形)缩放

确定多个 android 屏幕尺寸/密度的图像尺寸

壁纸不适合设备屏幕

使用图像无法正确缩放的绘制视图缩放:Android

java缩放图像绘制问题

AutoCAD 缩放