#android #picasso #android-glide
Вопрос:
Я использую Picasso с давних пор. Сегодня я перехожу на Glide. В Picasso я использовал следующий шаблон загрузки:
Picasso.get()
.load(file)
.resize(targetSize, 0)
.onlyScaleDown()
.placeholder(R.color.default_surface)
.error(R.color.default_surface_error)
.into(imageView)
В соответствии с документацией resize(int, int),
Используйте 0 в качестве желаемого размера для изменения размера с сохранением соотношения сторон
Согласно документации onlyScaleDown(),
Изменение размера изображения возможно только в том случае, если размер исходного изображения больше целевого размера, указанного с помощью resize(int, int)
Вот что я пытаюсь:
Glide.with(imageView)
.log(this, thumbnailUrl?.toString())
.load(thumbnailUrl)
.override(600)
.placeholder(R.color.default_surface)
.error(R.color.default_surface_error)
.into(imageView)
Glide использует стратегию понижающей дискретизации по умолчанию при загрузке изображений с использованием DownsampleStrategy.ЦЕНТР_ СНАРУЖИ. В нем говорится, что изображение масштабируется в соответствии с переопределенным размером таким образом, чтобы одно из измерений (наименьшее?) Было равно переопределенному размеру. И следующий комментарий:
Масштабируется, сохраняя исходное соотношение сторон, так что один из размеров изображения точно равен запрошенному размеру, а другой размер больше или равен запрошенному размеру.
Этот метод увеличит масштаб, если запрошенные ширина и высота будут больше, чем исходные ширина и высота. Чтобы избежать увеличения масштаба, используйте {@link #AT_LEAST}, {@link #AT_MOST} или {@link #CENTER_INSIDE} .
Параметры в DownsampleStrategy.java сбил меня с толку. Я не знаю, какой из них мне следует использовать. Я хочу, чтобы большие изображения уменьшались до переопределенного размера, а маленькие изображения никогда не увеличивались. Как добиться этого в Glide?
Ответ №1:
Я нашел ответ в выпуске Github # 3215, где предлагается следующее:
Выберите полезную стратегию уменьшения выборки, в частности, CENTER_INSIDE может быть тем, что вы ищете. По умолчанию
DownsampleStrategy
масштабируется для максимального увеличения повторного использования растрового изображения, но обычно доступна эквивалентная стратегия, которая не будет масштабироваться.
И DownsampleStrategy.CENTER_INSIDE
это соответствует тому, что я хотел:
Возвращает исходное изображение, если оно меньше целевого, в противном случае оно будет уменьшено с сохранением исходного соотношения сторон, так что один из размеров изображения будет точно равен запрошенному размеру, а другой меньше или равен запрошенному размеру. Не увеличивает масштаб, если запрошенные размеры больше исходных размеров.
Меня смутила документация по DownsampleStrategy.CENTER_INSIDE в коде.