2015-09-10 3 views
0

Я думал, что цель различных выпадающих папок (например, drawable-xhdpi, drawable-hdpi) заключается в том, чтобы избежать ненужных перераспределений для экономии ресурсов.ImageView ScaleType vs drawable folders

Однако, если я хочу поместить изображение в ImageView, я должен выбрать подходящий ScaleType, чтобы показать изображение правильно.

Согласно документации:

центр

Отображает изображение в центре вида, без масштабирования.

centerCrop

Масштабирование изображения таким образом, что оба х и у размеры больше, чем или равна точки зрения, сохраняя при этом соотношение сторон изображения; посещает любую часть изображения, которая превышает размер представления; центры изображение в представлении.

centerInside

Масштабирование изображения, чтобы поместиться внутри зрения, сохраняя при этом соотношение сторон изображения . Если изображение уже меньше, чем вид, то это совпадает с центром.

fitCenter

Масштабирование изображения, чтобы поместиться внутри зрения, сохраняя при этом соотношение сторон изображения . По крайней мере одна ось будет точно соответствовать представлению, а результат центрирован внутри представления.

fitStart

То же, что fitCenter, но выравнивается по верхней левой части зрения.

fitEnd

То же, что fitCenter, но выравнивается по нижней правой части зрения.

fitXY

Весы х и у размеры, чтобы точно соответствовать размеру вида; не поддерживает .

Как вы можете видеть, все типы весов кроме center изменения масштаба изображения.

Мой первый вопрос:

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

Мой второй вопрос:

Я мог бы использовать папку drawable-nodpi для любого изображения, а затем использовать тип шкалы, как fitCenter, так что изображения всегда будут иметь правильный размер.Почему я должен использовать любую папку, кроме drawable-nodpi?

+0

Если вы не указали какой-либо масштабный режим, изображение будет обрезано **. Попробуйте поместить изображения в «drawable-nodpi» и посмотреть, что происходит при разных плотностях экрана. –

+0

Что именно означает «обрезанный»? Совместим ли он с режимом масштаба «centerCrop»? – Mike76

+0

Масштабирование происходит из-за разных размеров экрана. Несколько разворачиваемых папок существуют для разных разрешений экрана. – scubasteve623

ответ

2

Различные папки ресурсов в основном используются для иконок, потому что для них в большинстве случаев масштаб вызывает размытость и позволяет помочь следующие вопросы:

  1. После масштабирования значок с коэффициентом масштабирования, как 1,5 значок может выглядит очень размытым.
  2. Это позволяет использовать простые изображения (с меньшими деталями) для устройств с низким разрешением. Вы можете сделать гораздо больше на значке 72x72, чем на 24x24.
  3. Также предоставление изображений в разных разрешениях позволяет вам установить ImageViews с размерами wrap_content, без вычисления точного размера в формате dps.

Я использую для почти всего контента только ресурсы высокого разрешения для папки xx-hdpi, android автоматически масштабирует его для ldpi, hdpi, mdpi и т. Д. Например, если вы используете значок из папки xx-hdpi на устройстве hdpi, он будет уменьшен дважды. Вы можете найти более подробную информацию здесь: http://developer.android.com/guide/practices/screens_support.html

И только для значков я использую разные папки с разрешением.

+0

Зачем мне настраивать ImageViews с помощью wrap_content? Я думал, что могу объявить высоту и ширину в 'dp' без каких-либо проблем. – Mike76

+1

Потому что, когда изображение будет масштабировать значок, вы получите что-то вроде этого: http://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0Bx4BSt6jniD7c2ZJUFZsUVBrRUk/style_icons_system_best_dont6.png. Чтобы ваши значки не размывались, размер изображения должен соответствовать размеру значка без масштабирования. Самый простой способ сделать это - поместить ваши значки в папку, зависящую от разрешения, и установить sizr изображения, чтобы обернуть его содержимое. –

+0

Полезно ли использовать 'wrap_content' для всех' ImageView '? Поскольку преимущество объявленного размера заключается в том, что я могу точно контролировать, насколько велико изображение на всех устройствах. – Mike76

2

Это вопрос плотности экрана или точек на дюйм (точек на дюйм); Это количество пикселей в определенной области на экране.

В общем, если вы новичок, вы можете избавиться от этих папок и использовать только один (drawable), не проблема, но предпочтительнее использовать различные drawable и mipmap папки должным образом для того, чтобы сделать качество Android приложение, которое отлично смотрится в разных устройствах с разными размерами экрана.

Теперь, чтобы подвести итог, ImageView.ScaleType устанавливает границы ресурса, чтобы они соответствовали границам вида, в то время как различные папки drawable позволяют Android выбирать тесные ресурсы с наилучшей плотностью для нашего устройства, в лучшем поиске нашего приложения.

Подробнее об этой теме documentation и этом blog.

+0

У меня были большие проблемы с использованием 'drawable', потому что мои изображения были излишне увеличены почти на всех устройствах. Однако, когда я использую 'drawable-xhdpi' как единственную папку, у меня нет проблем. Похоже, что «drawable» должен использоваться только для устройств с низким уровнем обслуживания? – Mike76

+1

Это будет зависеть от самого ресурса, потому что Android заставит его масштабировать, чтобы оно соответствовало вашему приложению. – Anas

+0

Android уже принудительно масштабирует его, когда я определяю тип шкалы для своего ImageView. Почему всевозможные папки с палитрой все еще имеют значение, хотя изображение все равно перемасштабировано? – Mike76

Смежные вопросы