Чертежи Mipmap для иконок
С Android 4.3 (Jelly Bean) теперь мы можем использовать res/mipmap
папки для хранения изображений "mipmap".
например, Chrome для Android хранит свои иконки в этих папках вместо более обычных res/drawable
папки.
чем эти изображения mipmap отличаются от других знакомых рисованных изображений?
я вижу, что в моем манифесте мы используем @mipmap/
классификатор, вместо @drawable/
, который имеет смысл учитывая имя папки ресурсов:
<activity
android:name=".MipmapDemp"
android:icon="@mipmap/ic_launcher" />
ссылки:
The Android 4.3 API документ сказал следующее:
использование mipmap в качестве источника для вашего растрового изображения или drawable является простым способ обеспечения качественного изображения и различных масштабов изображения, которые могут быть особенно полезно, если вы ожидаете, что ваше изображение будет масштабироваться во время анимация.
Android 4.2 (уровень API 17) добавлена поддержка MIP-карт в растровом изображении класс-Android меняет местами изображения mip в вашем растровом изображении, когда вы предоставили источник mipmap и включили setHasMipMap (). Сейчас в Android 4.3, вы можете MIP-отображения для объекта BitmapDrawable, а также, по предоставление ресурса mipmap и Установка атрибута android:mipMap в a растровый файл ресурсов или путем вызова hasMipMap ().
я не вижу там ничего, что помогло бы мне понять.
растровое изображение XML ресурсы есть android:mipMap
свойства:
логическое. Включает или отключает подсказку mipmap. См. setHasMipMap () для подробная информация. Значение по умолчанию-false.
это не относится к значкам запуска, насколько я могу видеть.
вопрос был поднят в группах Google (цель имени ресурса "mipmap"?!), на что Ромен Гай ответил:
это полезно чтобы обеспечить изображение с большим разрешением, которое будет обычно вычисляется (например, на устройстве mdpi, Launcher может хотите, чтобы значок большего hdpi отображал большие ярлыки приложений.)
я чувствую, что это почти имеет смысл, но не совсем.
я все еще склонен идти с последующим Рэнди Sugianto:
каковы преимущества этого? Есть ли руководство как пользоваться mipmaps, вероятно, для лучшего запуска иконы?
конечно, в Википедии есть страница для "Mipmap", который относится к более старой технике, изобретенной в 1983 году, что я не могу полностью относиться к текущей реализации Android.
должны ли мы хранить все наши приложения иконок в res/mipmap
папки в эти дни, и каковы рекомендации для этих изображений mipmap?
обновление #1
вот сообщение в блоге, которое пытается объяснить это немного.
но изображение, используемое в этом блоге, показывает, что выглядит как один файл со многими логотипами в нем. Это не то, что я вижу в папке mipmap Chrome.
в Chrome mipmap-hdpi
папка содержит три изображения. Один из них-логотип Chrome, сам по себе.
как ни странно, это так 72x72, а не 48x48, которые я ожидал бы увидеть.
возможно, это все, что нужно - нам просто нужно держать большие значки в папках mipmap?
обновление #2
сообщение в блоге разработчиков Android от 23.10.2014 снова подтверждает идею использования mipmap
папки для иконок приложений:
при разговоре о плотности экрана Nexus 6 автор пишет:
рекомендуется размещать значки приложений в папках mipmap (а не drawable-folders), потому что они используются в разрешениях, отличных от плотность тока устройства. Например, значок приложения xxxhdpi может быть используется в пусковой установке для устройства xxhdpi.
обновление #3
обратите внимание, что Android Studio создает ic_launcher.png
иконки в mipmap...
папки, а не drawable...
папки, в которых Eclipse создавал их.
11 ответов:
есть два различных использования mipmaps:
для значков запуска при создании плотности конкретных АПК. Некоторые разработчики создают отдельные АПК для каждой плотности,чтобы уменьшить размер АПК. Однако некоторые пусковые установки (поставляемые с некоторыми устройствами или доступные в магазине Play) используют большие размеры значков, чем стандартные 48dp. Пусковые установки используют getDrawableForDensity и при необходимости масштабируются вниз, а не вверх, поэтому значки имеют высокое качество. Например, на планшете hdpi пусковая установка может загрузить значок xhdpi. Поместив значок запуска в каталог mipmap-xhdpi, он не будет удален так, как каталог drawable-xhdpi при создании APK для устройств hdpi. Если вы создаете один APK для всех устройств, то это действительно не имеет значения, поскольку пусковая установка может получить доступ к привлекаемым ресурсам для желаемой плотности.
фактический API mipmap от 4.3. Я не использовал это и не знаком с ним. Он не используется Android Пусковые установки с открытым исходным кодом, и я не знаю ни о какой другой пусковой установке.
Кажется, у Google есть обновили свои документы так как все эти ответы, так что, надеюсь, это поможет кому-то еще в будущем :) просто наткнулся на этот вопрос сам, создавая новый (новый новый) проект.
TL; DR: drawables могут быть удалены как часть оптимизации ресурсов DP-specific. Mipmaps не будут удалены.
различные приложения запуска на главном экране на разных устройствах показывают значки запуска приложений с различными разрешениями. Когда приложение методы оптимизации ресурсов удалите ресурсы для неиспользуемых плотностей экрана, значки запуска могут выглядеть нечеткими, потому что приложение запуска должно масштабировать значок с более низким разрешением для отображения. Чтобы избежать этих проблем с отображением, приложения должны использовать
mipmap/
папки ресурсов для значков запуска. Система Android сохраняет эти ресурсы независимо от плотности зачистки и гарантирует, что приложения запуска могут выбирать значки с лучшим разрешением для отображения.(from http://developer.android.com/tools/projects/index.html#mipmap)
чем эти изображения mipmap отличаются от других знакомых рисованных изображений?
вот мои два цента в попытке объяснить разницу. Есть два случая, с которыми вы имеете дело при работе с изображениями в Android:
вы хотите загрузить изображение для вашего плотность устройства и вы собираетесь использовать его "как есть", без изменения его фактического размера. В этом случае вы должны работать с drawables и Android даст вам лучшее подходящее изображение.
вы хотите загрузить изображение для плотности вашего устройства, но это изображение будет масштабироваться вверх или вниз. Например, это необходимо, когда вы хотите показать большую иконку запуска, или у вас есть анимация, которая увеличивает размер изображения. В таких случаях, чтобы обеспечить лучшее качество изображения, вы должны поместить свое изображение в mipmap. Что будет делать Android, он попытается забрать изображение из ведро более высокой плотности вместо масштабирования. Это повысит резкость (качество) изображения.
таким образом, эмпирическое правило, чтобы решить, куда поместить ваше изображение будет:
- Launcher иконки на mipmap.
- картинки, которые часто масштабирование (или чрезвычайно уменьшен) и чье качество имеет решающее значение для приложения, перейдите в mipmap также.
- все остальные изображения обычные drawables.
реализация Android mipmaps в 4.3-это именно техника с 1983 года, объясненная в статье Википедии:)
каждого растрового изображения в набор MIP-карты-это уменьшенные копии основная текстура, но при определенном сниженном уровне детализации. Хотя основная текстура будет по-прежнему использоваться, когда вид достаточен для визуализации это в полной мере подробно, рендерер переключится на подходящее изображение mipmap (...), когда текстура просматривается с расстояния или в небольшой размер.
хотя это описывается как метод для 3D-графики (поскольку он упоминает "просмотр с расстояния"), он применяется также и к 2D (переводится как "нарисованное меньшее пространство", т. е. "масштабирование").
для конкретного примера Android, представьте, что у вас есть вид с определенным фоном drawable (в частности, a
BitmapDrawable
). Теперь вы используете анимацию, чтобы масштабировать ее до 0,15 от исходного размера. Как правило, это потребует снижения фона растровое изображение для каждого кадра. Однако такое "экстремальное" масштабирование может привести к появлению визуальных артефактов.вы можете, однако, предоставить mipmap, что означает, что изображение уже предварительно визуализировано для нескольких конкретных масштабов (скажем, 1.0, 0.5 и 0.25). Всякий раз, когда анимация "пересекает" порог 0,5, вместо того, чтобы продолжать уменьшать исходное изображение размером 1,0, она переключится на изображение 0,5 и уменьшит его, что должно обеспечить лучший результат. И так далее в качестве анимации продолжает.
Это немного теоретически, так как это на самом деле сделано рендерером. Согласно источнику класса Bitmap, это просто подсказка, и рендерер может или не может ее выполнить.
/** * Set a hint for the renderer responsible for drawing this bitmap * indicating that it should attempt to use mipmaps when this bitmap * is drawn scaled down. * * If you know that you are going to draw this bitmap at less than * 50% of its original size, you may be able to obtain a higher * quality by turning this property on. * * Note that if the renderer respects this hint it might have to * allocate extra memory to hold the mipmap levels for this bitmap. * * This property is only a suggestion that can be ignored by the * renderer. It is not guaranteed to have any effect. * * @param hasMipMap indicates whether the renderer should attempt * to use mipmaps * * @see #hasMipMap() */ public final void setHasMipMap(boolean hasMipMap) { nativeSetHasMipMap(mNativeBitmap, hasMipMap); }
Я не совсем уверен, почему это было бы особенно подходит для значков приложений, хотя. Хотя Android на планшетах, а также некоторые пусковые установки (например, GEL), запрашивают значок "на одну плотность выше", чтобы показать его больше, это должно быть сделано с помощью обычного механизма (т. е.
drawable-xxxhdpi
, &c).
одна вещь, которую я упомянул в другом потоке, на которую стоит обратить внимание-если вы создаете разные версии своего приложения для разных плотностей, вы должны знать о каталоге ресурсов "mipmap". Это точно так же, как" привлекаемые " ресурсы, за исключением того, что он не участвует в удалении плотности при создании различных целей apk.
https://plus.google.com/105051985738280261832/posts/QTA9McYan1L
поскольку я искал уточняющий ответ на это, чтобы определить правильный тип значков уведомлений, я хотел бы добавить это четкое заявление в тему. Это от http://developer.android.com/tools/help/image-asset-studio.html#saving
Примечание: файлы значков запуска находятся в другом месте другая икона. Они находятся в папке mipmap/. все остальные иконки файлы находятся в папке drawable/ вашего проект.
есть два случая, с которыми вы имеете дело при работе с изображениями в Android:
- вы хотите загрузить изображение для плотности вашего устройства, и вы собираетесь использовать его "как есть", не изменяя его фактический размер. В этом случае вы следует работать с drawables и Android даст вам лучшую подгонку изображение.
- вы хотите загрузить изображение для вашего плотность устройства, но это изображение будет масштабироваться вверх или вниз. Например, это нужно, когда вы хотите показать большую иконку запуска, или у вас есть анимация, которая увеличивает размер изображения. В таких случаях для обеспечения наилучшего качества изображения, вы должны поместить свое изображение в папку mipmap. Что Android будет делать это, вместо этого он попытается забрать изображение из ведра с более высокой плотностью о его масштабировании.
так
таким образом, эмпирическое правило, чтобы решить, где поместить изображение в будет быть:
значки запуска всегда идут в папку mipmap.
изображения, которые часто масштабируются (или чрезвычайно масштабируются) и качество которых имеет решающее значение для приложения, перейдите в папку mipmap как что ж.
все остальные изображения являются обычными чертежами.
цитата из этой статьи.
Если вы создадите APK для целевого разрешения экрана, такого как HDPI, инструмент для упаковки активов Android,AAPT,может удалить чертежи для другого разрешения, которое вам не нужно.Но если он находится в папке mipmap,то эти активы останутся в APK, независимо от целевого разрешения.
при построении отдельных apks для разных плотностей, рисуемые папки для других плотностей будут удалены. Это сделает значки размытыми в устройствах, которые используют значки запуска более высокой плотности. Поскольку папки mipmap не удаляются, всегда лучше использовать их для включения значков запуска.
понимание, которое я имею о mipmap, более или менее похоже на это:
когда изображение должно быть нарисовано, учитывая, что у нас разные размеры экрана резолюций, масштабированием придется принять участие.
Если у вас есть изображение, которое подходит для сотового телефона низкого класса, когда вы масштабируете его до размера 10-дюймового планшета, вам нужно" изобрести "пиксели, которые на самом деле не существуют. Это делается с помощью некоторого алгоритма интерполяции. Чем больше количество пикселей, которые должны быть изобретены, более длительный процесс занимает и качество начинает терпеть неудачу. Лучшее качество достигается с помощью более сложных алгоритмов, которые занимают больше времени (например, среднее значение окружающих пикселов против копирования ближайшего пикселя).
чтобы уменьшить количество пикселей, которые должны быть изобретены, с помощью mipmap вы предоставляете разные размеры/разрешения одного и того же изображения, и система выберет ближайшее изображение к разрешению, которое должно быть визуализировано, и сделает масштабирование оттуда. Это должно уменьшить количество изобретенных пикселей экономии ресурсов, которые будут использоваться при расчете этих пикселей, чтобы обеспечить хорошее качество изображения.
Я читал об этом в статье, объясняющей проблему производительности в libgdx при масштабировании изображений:
res/ mipmap-mdpi/ic_launcher.png (48x48 pixels) mipmap-hdpi/ic_launcher.png (72x72) mipmap-xhdpi/ic_launcher.png (96x96) mipmap-xxhdpi/ic_launcher.png (144x144) mipmap-xxxhdpi/ic_launcher.png (192x192)
mipmap для значка приложения для запуска
http://android-developers.blogspot.co.uk/2014/10/getting-your-apps-ready-for-nexus-6-and.html
https://androidbycode.wordpress.com/2015/02/14/goodbye-launcher-drawables-hello-mipmaps/