У меня есть 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
потому что я хотел, чтобы некоторые значки были поверх этого позже. Но это неважно для этого вопроса.