使用带有fitCenter scaleType的ImageView小图像时,如何避免不必要的放大

时间:2017-06-25 20:35:15

标签: android image

我有以下ImageView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_main"
    android:background="?attr/colorPrimary"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary">
    </android.support.v7.widget.Toolbar>

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="false"
        android:scaleType="center"
        android:src="@drawable/drink" />
</LinearLayout>

我尝试过各种类型的scaleType。我找不到一个好的scaleType,它对“大”图像和“小”图像都有好处。

  1. 保留宽高比
  2. 没有裁剪。图像的所有内容都应该是可见的。
  3. 如果图像高度或宽度大于ImageView,则应执行缩小。
  4. 如果图像高度和宽度小于ImageView,则应显示原始图像。 没有放大
  5. 我曾尝试fitCenter。它适用于1,2,3但不是4.它在小图像上执行不必要的“放大”。

    fitCenter

    当使用大图像2432x3286时。

    enter image description here

    使用小图像96x96时。 正在执行不需要的扩展

    enter image description here

    如果我尝试使用center,则效果不佳2.大图像将被裁剪。

    小图片没问题。不会进行放大。

    中心

    当使用大图像2432x3286时,会发生不需要的裁剪(秸秆对象不再可见)

    enter image description here

    知道我怎样才能有更好的scaleType

    或者,我必须检查图片大小并将其与ImageView尺寸进行比较,以确定是否正确scaleType?我不想去那条路,因为我的图像输入是Uri形式。确定图像尺寸对我来说很麻烦。

1 个答案:

答案 0 :(得分:1)

你可以用 android:scaleType="centerInside"

设置宽度和高度wrap_content并为您的imageview设置最大高度和宽度,如下所示:

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter"
        android:maxHeight="100dp"
        android:maxWidth="100dp"
        android:adjustViewBounds="true"
        android:src="@mipmap/ic_launcher"/>