Как выбрать scaleType для ImageView - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть RecyclerView, отображающий кучу изображений в виде миниатюр. width и height изображений могут различаться, некоторые 1280x720, а некоторые 4128x2322.

Когда я выбираю scaleType="center" для ImageView в макете XML, тогда мои 4128x2322 изображения отображаются идеально (они занимают весь экран, как и ожидалось), но 1280x720 изображения отображаются очень брезгливо (вы не можете видеть изображение целиком, только его часть, как будто кто-то увеличил масштаб)

Когда я выбираю scaleType="centerInside", тогда изображения 1280x720 отображаются идеально (отображается целое изображение, и оно выглядит как настоящее уменьшенное изображение, похожее на то, что мы знаем из приложений, таких как YouTube), но 4128x2322 изображения сжимаются, и это выглядит нехорошо.

Каков типичный способ решения этой проблемы, чтобы мой ImageView мог настроить свои width и height наиболее подходящим образом, исходя из того, что width и height.

Для полноты, вот мой файл макета image_list_item.xml:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="image"
            type="com.celik.abdullah.learningdifferentscaletypesforimageview.Image" />

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:weightSum="100">

        <FrameLayout
            android:id="@+id/image_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:scaleType = "center">

            <ImageView
                android:id="@+id/thumbnail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="center"
                tools:src="@mipmap/ic_launcher_round"
                app:imageSrc="@{image.imageUrl}" />

        </FrameLayout>


    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

ImageView заключен в FrameLayout потому что я хотел, чтобы некоторые значки были поверх этого позже. Но это неважно для этого вопроса.

1 Ответ

0 голосов
/ 15 апреля 2020

Пожалуйста, добавьте android:scaleType="fitXY" в теге ImageView ...

               <ImageView
                android:id="@+id/thumbnail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="fitXY"
                tools:src="@mipmap/ic_launcher_round"
                app:imageSrc="@{image.imageUrl}" />
...