Как создать ImageView, который заполняет родительскую высоту и отображает изображение как можно большего размера? - PullRequest
23 голосов
/ 24 ноября 2010

У меня есть ImageView, который определяется следующим образом:

 <ImageView
  android:id="@+id/cover_view"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:layout_below="@id/title"
  android:layout_above="@id/divider"
  android:adjustViewBounds="true"
  android:src="@drawable/image_placeholder"
  android:scaleType="fitStart"/>

Теперь, после загрузки нового растрового изображения, я изменяю чертеж.Изображение теперь появляется в верхнем левом углу ImageView.Есть ли способ заставить изображение заполнить всю возможную высоту, а затем отрегулировать ширину вида, чтобы разрешить масштабирование изображения без изменения соотношения сторон?

Изображение заполняет все пространство на стандартном экране, но при разрешении WVGA изображение занимает только половину фактической высоты ImageView.

Ответы [ 4 ]

44 голосов
/ 24 ноября 2010

Если я правильно вас понимаю, вам нужно использовать centerCrop scaleType.fitStart пропорционально масштабирует изображение, но ни ширина, ни высота не превысят размер вида, и изображение, как вы сказали, будет иметь гравитацию top|left.

Использование centerCrop пропорционально масштабирует изображение, но заставляет самый короткий край изображения соответствовать размеру вида, и если на длинной стороне есть дополнительные данные, которые не помещаются, оно просто обрезаетсявыкл.Гравитация, конечно, center.Ниже работал для меня:

<ImageView
        android:src="@drawable/image_placeholder"
        android:id="@+id/cover_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="centerCrop"
/>
10 голосов
/ 24 ноября 2010

Вы можете изменить тип шкалы на fitXY, позвонив на

imageView.setScaleType(ScaleType.FIT_XY);
4 голосов
/ 02 февраля 2016

просто сделайте это в XML как

android:scaleType="fitXY"
1 голос
/ 24 ноября 2010

В основном ответ здесь заключается в том, что нет предопределенного значения для того, чего вы пытаетесь достичь.Решение состоит в том, чтобы создать Matrix, который соответствует вашим потребностям, и набрать setImageMatrix(matrix) на вашем ImageView.

...