Размер заполнителя Android Glide одинаковый с другим размером изображения

Целый день потратил на эту проблему :(

В своем приложении для Android я загружаю с сервера изображения разного размера. Например, изображение A имеет размер 500x330, изображение B имеет размер 500x700 и так далее. Я также добавил текст под изображениями. Я использую изображение-заполнитель размером 500x400.

Я могу загрузить изображения и показать заполнитель с помощью Glide:

XML:

<android.support.v7.widget.AppCompatImageView
        android:id="@+id/myImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="fitXY" />

Котлин:

GlideApp.with(myImage.context)
            .load(url)
            .skipMemoryCache(false)
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(myImage)

Проблема:

Пока изображение загружается, отображается заполнитель с высотой 400. По окончании загрузки пользователи увидят, например, изменение высоты с 400 до 700. Затем пользователи также видят, что текст под изображениями прыгает вверх или вниз в зависимости от размера изображения :(

Вопрос:

Как я могу масштабировать или поддерживать одинаковый размер заполнителя с каждым загружаемым изображением, которое я хочу показать в пользовательском интерфейсе. Чтобы UI не менялся после загрузки?

Примечания. Я не хочу жестко кодировать высоту моих статических изображений, например, layout_height = "100dp". Они должны быть того же размера и радио, что и они.

Если Glide не может этого сделать. Ребята, у вас есть другие предложения?

Большое спасибо.


person Gold Chicken    schedule 21.08.2018    source источник


Ответы (1)


Не знаю, активна ли эта проблема. Я надеюсь, что это поможет вам, если вы установите для fitCenter () значение Glide. Это поместит изображение в заполнитель и не изменит размеры. Buuut .... вы увидите, что будет некоторое белое пространство, если у фотографии нет точного соотношения сторон, как у изображения-заполнителя.

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

.override(w, h) // set exact size
.fitCenter() // keep memory usage low by fitting into (w x h) [optional]

куда

w = placeholderDrawable width
h = placeholderDrawable height

Я очень надеюсь, что это поможет.

Подробнее здесь

person sunlover3    schedule 14.01.2019