如何在Android的ImageView中防止图片缩放?

14

我有一张480像素宽,40像素高的图片。我希望在ImageView中显示这张图片时不要缩放。

例如:如果我的屏幕只有320像素宽,我希望屏幕上只显示320像素的图像,而不是让它自动适应ImageView(即使这意味着图像的其余部分被剪切掉)。

是否有办法防止它缩放以适应屏幕?

编辑:同时,我希望图片的左侧与设备屏幕的左侧对齐。

谢谢。

6个回答

29

ScaleType 绝对是最佳选择。适用于许多不同的用例。 - Michell Bak
谢谢,但有没有办法让它靠左显示? - PaulG
@PaulG,根据您的意思而定,但如果您想要显示图像的左侧部分,并且由于有更多的空间,最右侧的部分也要显示...那么,在SDK内部没有解决方案,您将需要检查ImageView的源代码并创建自己的转换矩阵。 - Snicolas
我一直搞不明白为什么它对我不起作用,直到我发现我使用的是background而不是src来指定可绘制对象 :-s - Ciske

16

使用MATRIX scaletype将其设置为无缩放和无居中

除非使用setImageMatrix(matrix)进行设置,否则它将使用单位矩阵。

android:scaleType="matrix"

或者在Java中:

view.setScaleType(ImageView.ScaleType.MATRIX);

非常感谢!scaleType center 没有按预期工作,但 matrix 却可以。 在我的情况下,我有一个 TextView 布局位于图像的左侧,当文本增长时,我需要右侧的图像始终保持原始大小。 - Moxor
谢谢,这正是我需要调试基于图像映射的用户界面所需的内容,直到我将scaleType设置为matrix,检测命中才能正常工作。 - slogan621

3
尝试这个:
                    android:adjustViewBounds="true"
                    android:scaleType="centerCrop"

1
如果android:scaleType="center"不起作用,检查一下你是如何设置图像的。你必须使用android:src而不是android:background。因此,
 android:scaleType="center"
 android:src="@drawable/yourDrawable"

0

我曾经遇到过类似的问题,我有一个固定大小的图形,想要将其缩放到屏幕上但保持比例,它的尺寸是480 x 200。

我在高度上使用了Fill_parent,以便进行缩放,并在宽度上使用了wrap_content。 同时,还使用了Align Parent Left和Align Parent Top。

在您的情况下,您可以在两者上都使用wrap_content,以及Align Parent Left。 然后,我使用正常屏幕上的Right Margin 180dp来微调宽度,以确保它保持不变。

<ImageView
    android:id="@+id/imageLayer"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="180dp"
    tools:ignore="ContentDescription" />

0
我的问题是我在XML布局文件中设置了比例类型,但我在Java代码中手动设置了图片。
解决方案是在Java代码中设置比例类型而不是XML文件。
以下是对我有效的解决方法:
// set image
backgroundImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

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