Не проще ли предоставить один ресурс PNG с возможностью рисования в высоком разрешении и позволить Android уменьшить его масштаб?

#android #drawable #scaling #assets

#Android #можно рисовать #масштабирование #активы

Вопрос:

Я хочу создать фоновое изображение для viewgroup в приложении для Android, и я не уверен, что лучше всего делать с этим ресурсом.

Проще ли (читай: выглядит лучше на большинстве телефонов) просто предоставить ресурс в виде 900×570 или там около и позволить Android автоматически масштабировать его вверх и вниз или масштабировать его самостоятельно в Photoshop и предоставлять эти изображения в папках 3 drawable-ldpi , drawable-mdpi , и drawable-hdpi ?

Экономия места будет настолько мала: около 10-20 тыс., что мне кажется более разумным просто позволить Android масштабировать изображения самостоятельно.

Целевой API будет на уровне 2.0 и выше, и планшеты изначально не поддерживаются.

Комментарии:

1. Точно ли известны масштабируемые размеры? Если нет, их все равно нужно будет масштабировать, и наилучшее качество будет получено, если начинать с самого большого оригинала.

2. @MarkRansom Я собирался использовать самые распространенные размеры разрешения для каждого dpi, поэтому hpi я бы придерживался 854, mdpi 320×480. Насколько я могу судить, только два телефона с 2.x имеют экраны ldpi

Ответ №1:

Очевидно, что с точки зрения разработчика проще позволить Android масштабировать изображения для вас, но на большинстве телефонов это выглядит не лучше. По моему опыту, Photoshop имеет лучшие алгоритмы масштабирования, чем Android.

Комментарии:

1. 1 за указание на то, что изображения, масштабируемые Android, могут выглядеть нерезкими или могут быть слишком четкими, в основном иногда это выглядит совсем не хорошо

2. Верно, но я должен добавить: разработчику еще проще создать сценарий генерации этих изображений с учетом специфики плотности из приличного (векторного, если возможно) мастер-файла… Руководство по пользовательскому интерфейсу developer.android.com/guide/practices/ui_guidelines/index.html для меня все ясно (особенно руководство по дизайну иконок, которое можно экстраполировать)

Ответ №2:

если вы укажете только одно изображение копии в любом из drawable, drawable-ldpi, drawable-mdpi и drawable-hdpi, android по умолчанию масштабирует его для вас

однако рекомендуется использовать изображения разного размера по соображениям производительности

Комментарии:

1. Я согласен с Optimus, лучше всего предоставлять чертежи с измененным размером… Более того, просто ничего не нужно делать в скрипте для пакетной регенерации ваших чертежей из источников, если это необходимо (я делаю это сам, чтобы конвертировать pdf master в hdpi, ldpi, mdpi растровые значки, например)… Вы могли бы использовать ImageMagick… Это не вопрос размера, а скорее вопрос производительности и рендеринга.

2. Это то, что я имел в виду: предполагается, что ваш ресурс по умолчанию равен mdpi, но на самом деле имеет высокий dpi, и поэтому масштабирование не размывается / не делится на пиксели

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

Ответ №3:

Это проще, но имеет свои издержки с точки зрения производительности.

Если целевая плотность известна, будет лучше записать все необходимые преобразования для ваших значков / заставок / изображений и забыть об этом до следующего изменения ваших мастеров… бесплатно…

Вот пример использования ImageMagick для моих значков и listview eye-candies из pdf masters:

 #!/bin/bash
convert -transparent white ic_padlock.pdf ic_padlock.png
convert -scale 36x36 ic_padlock.png ../../res/drawable-ldpi/ic_launcher_padlock.png
convert -scale 48x48 ic_padlock.png ../../res/drawable-mdpi/ic_launcher_padlock.png
convert -scale 72x72 ic_padlock.png ../../res/drawable-hdpi/ic_launcher_padlock.png
convert -scale 24x24 ic_padlock.png ../../res/drawable-ldpi/ic_listview_padlock.png
convert -scale 32x32 ic_padlock.png ../../res/drawable-mdpi/ic_listview_padlock.png
convert -scale 48x48 ic_padlock.png ../../res/drawable-hdpi/ic_listview_padlock.png
convert -transparent white ic_padlock_ok.pdf ic_padlock_ok.png
convert -scale 36x36 ic_padlock_ok.png ../../res/drawable-ldpi/ic_listview_padlock_ok.png
convert -scale 48x48 ic_padlock_ok.png ../../res/drawable-mdpi/ic_listview_padlock_ok.png
convert -scale 72x72 ic_padlock_ok.png ../../res/drawable-hdpi/ic_listview_padlock_ok.png
 

Вы можете использовать преобразование с параметром плотности для наилучшего рендеринга:

 convert -density targetdensityxtargetdensity  -transparent white splash.pdf ../../res/drawable/splash.png
 

Комментарии:

1. Я ориентируюсь на устройства 2.1 и исходя из этой статистики: developer.android.com/resources/dashboard/screens.html похоже, мне следует беспокоиться о проблемах с экранами с более низким разрешением, когда они появляются. Изображение также является фоном для действия, а не значками, подобно тому, как запомнить молоко

2. developer.android.com/guide/topics/resources /… и developer.android.com/guide/practices/screens_support.html может быть полезным. Вы можете использовать convert или другую программу с учетом плотности / масштаба. Вам просто нужно позаботиться о тонкости dp / dpi. Согласно документации, «маленькие экраны имеют не менее 426dp x 320dp».