ImageView - фиксированный размер, независимо от размера изображения

У меня есть ImageView, который всегда должен быть того же размера. Если изображение меньше, чем представление, я бы хотел, чтобы оно было сосредоточено в представлении. Если изображение больше, чем представление, я бы хотел его уменьшить - с сохранением пропорции.

У меня было несколько попыток в этом - последнее из которых:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <ImageView android:id="@+id/itemImage" android:layout_width="100dp"
            android:layout_height="100dp" android:scaleType="fitCenter"
            android:adjustViewBounds="true" android:gravity="center" android:padding="10px" />
  <TextView android:id="@+id/currentLentItem" android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:padding="10px"/>
</LinearLayout>

Что мне здесь не хватает?

Ответы

Ответ 1

Попробуйте использовать тип шкалы centerInside, как показано ниже:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
    <ImageView
        android:id="@+id/itemImage"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentRight="true"
        android:scaleType="centerInside"
        android:gravity="right|center_vertical"
        android:padding="10px"
        />
    <TextView
        android:id="@+id/currentLentItem"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@id/list_image"
        android:padding="10px"
        />
</RelativeLayout>

Это приводит к уменьшению масштаба изображения, если оно больше, чем макет, и оно будет масштабироваться пропорционально (в то время как fitXY масштабируется без учета соотношения сторон). Он также будет центрировать изображение, если оно меньше.

EDIT: Я обновил пример для чего-то вроде того, что вам нужно. Здесь суть изменения:

• Сила ImageView изменена на right|center_vertical. Поскольку вы хотите, чтобы они выравнивались справа, использование этой силы тяжести позволит это, даже если они являются ориентационными изображениями ориентации.

• ImageView выровнен справа от RelativeLayout

• RelativeLayout установлен на wrap_content, поскольку он будет использоваться для ListView.

• Добавлен TextView, выровненный с родительским слева, с его правым краем, определяемым левым краем itemImage.

Ответ 2

Если изображение больше, чем представление, вы можете масштабировать его, используя:

android:scaleType="fitXY" 

Это не даст вам то, что вы хотите, если изображение меньше. Возможно, вы можете обнаружить это во время выполнения и программно изменить scaleType.