为什么ImageView的图像会被拉伸?

时间:2015-01-31 10:14:57

标签: android

我有以下布局:ö

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="@android:color/black"
    android:gravity="center" >

    <ImageView
        android:id="@+id/main_gradient"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/gradient"
        android:contentDescription="@string/imageview_description"
        android:scaleType="centerInside" />
</RelativeLayout>

'渐变'图像是一个400 x 400像素的jpg。我的屏幕尺寸为1920 x 1200.我将Gravity的{​​{1}}设为RelativeLayout,我的center的高度和宽度定义为{{1} }。我尝试了ImageViewwrap_content等等和scaleType="centerInside",但没有任何效果。 fitCenter总是被拉伸到屏幕尺寸。

为什么?

当内容为400 x 400时,带有centerInParent="true"布局参数的ImageView如何占据整个屏幕。我不明白。

修改

你可以让ImageView像这样居中:

wrap_content

BUT

Image本身仍然与整个屏幕一样大。为什么忽略<ImageView android:id="@+id/main_gradient" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/gradient" android:scaleType="centerInside" android:contentDescription="@string/imageview_description" />

5 个答案:

答案 0 :(得分:3)

使用src而不是背景

android:src="@drawable/gradient"

src具有fitCenter等功能。背景将永远延伸

答案 1 :(得分:0)

如果要在不拉伸的情况下以真实分辨率显示图像,可以将宽度和高度设置为400px。 您还可以将scaleType="center"设置为不对原始图像应用缩放,并将centerInParent="true"设置为将ImageView定位在RelativeLayout的中心。 另外,不要忘记使用src="@drawable/yourdrawable"

设置ImageView图像

我不建议将图像宽度和高度设置为静态像素数量,因为它在不同设备上看起来很奇怪。

您可以阅读的更多信息: https://developer.android.com/reference/android/widget/ImageView.ScaleType.html

答案 2 :(得分:0)

android:scaleType只在src中工作 所以当你想要缩放图片时,你不应该使用背景而是使用src属性

答案 3 :(得分:0)

使用android:scaleType="centerCrop"代替android:scaleType="centerInside"

答案 4 :(得分:0)

将其更改为src时,您需要在其中保留scaleType属性。

<ImageView
    android:id="@+id/main_gradient"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/blue"
    android:contentDescription="imageview_description"
    android:scaleType="centerInside" />

或只是使用

android:scaleType="center" />
  

将图像置于视图中心,但不执行缩放。从XML,使用以下语法:android:scaleType =“center”。

android.com

编辑:

我刚刚缩小了我的图像尺寸以证明它有效,它不应该将其调整为大于400px。

portrait landscape