Mipmap drawables для значков

С Android 4.3 (Jelly Bean) теперь мы можем использовать res/mipmap папки для хранения изображений "mipmap".

например, Chrome для Android сохраняет свои значки в этих папках вместо более нормальных res/drawable папки.

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

я вижу, что в моем манифесте мы используем @mipmap/ классификатор, вместо @drawable/, который имеет смысл имя папки ресурса:

<activity
    android:name=".MipmapDemp"
    android:icon="@mipmap/ic_launcher" />

ссылки:

на Android 4.3 API документ сказал следующее:

использование mipmap в качестве источника для вашего растрового изображения или drawable является простым способ обеспечения качества изображения и различных масштабов изображения, которые могут быть особенно полезно, если вы ожидаете, что ваше изображение будет масштабироваться во время анимация.

Android 4.2 (уровень API 17) добавлена поддержка MIP-карт в растровом изображении class-Android меняет местами изображения mip в растровом изображении, когда вы предоставили источник mipmap и включили setHasMipMap (). Сейчас в Android 4.3, вы также можете включить mipmaps для объекта BitmapDrawable, предоставление ресурса mipmap и Установка атрибута android:mipMap в растровый файл ресурсов или путем вызова hasMipMap ().

я не вижу там ничего, что помогло бы мне понять.


растровое изображение XML ресурсы есть android:mipMap свойства:

Boolean. Включает или отключает подсказку mipmap. См. setHasMipMap () для подробная информация. Значение по умолчанию-false.

это не относится к значкам запуска, насколько я могу видеть.


вопрос был поднят в Google Groups (назначение имени ресурса "mipmap"?!), на что Ромен Гай ответил:

это полезно чтобы обеспечить изображение с большим разрешением, которое обычно вычисляется (например, на устройстве mdpi Launcher может хотите, чтобы большой значок hdpi отображал большие ярлыки приложений.)

я чувствую, что это почти имеет смысл, но не совсем.

я все-таки склонен пойти с Рэнди Sugianto по выполнению:

каковы преимущества этого? Есть ли руководство по использованию mipmaps, вероятно, для лучшей пусковой установки иконы?


конечно, Википедия имеет страницу для "Mipmap", который относится к более старой технике, изобретенной в 1983 году, что я не могу полностью относиться к текущей реализации Android.


должны ли мы хранить все наши приложения иконок в res/mipmap папки в эти дни, и каковы рекомендации для этих изображений mipmap?


обновление #1

вот сообщение в блоге, которое пытается объяснить это немного.

но изображение, используемое в этом сообщении в блоге, показывает, что выглядит как один файл со многими логотипами. Это не то, что я вижу в папке mipmap Chrome.

в Chrome mipmap-hdpi папка содержит три изображения. Один из них-логотип Chrome, на его собственный.

Chrome mipmap-hdpi icon.png

странно, это 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:

  1. для значков запуска при построении плотности конкретных APKs. Некоторые разработчики строят отдельные APKs для каждой плотности, чтобы сохранить размер APK вниз. Однако некоторые пусковые установки (поставляются с некоторыми устройствами или доступны в Play Store) используют большие размеры значков, чем стандартные 48dp. Пусковые установки используют getDrawableForDensity и масштабируются при необходимости, а не вверх, поэтому значки высокого качества. Например, на планшете hdpi launcher может загрузить значок xhdpi. Поместив значок запуска в каталог mipmap-xhdpi, он не будет удален так, как каталог drawable-xhdpi при создании APK для устройств hdpi. Если вы создаете один APK для всех устройств, то это не имеет значения, так как launcher может получить доступ к привлекаемым ресурсам для желаемой плотности.

  2. фактический API mipmap от 4.3. Я не использовал это и не знаком с ним. Он не используется Android Запуски проектов с открытым исходным кодом, и я не знаю ни о какой другой пусковой установке.


Кажется, у Google есть обновили свои документы поскольку все эти ответы, надеюсь, это поможет кому-то еще в будущем :) просто наткнулся на этот вопрос сам, создавая новый (новый новый) проект.

TL; DR: drawables могут быть удалены как часть оптимизации ресурсов DP-specific. MIP-карты не будут удалены.

различные приложения запуска на главном экране на разных устройствах показывают значки запуска приложений с различными разрешениями. Когда приложение методы оптимизации ресурсов удалите ресурсы для неиспользуемых плотностей экрана, значки запуска могут выглядеть нечеткими, потому что приложение запуска должно масштабировать значок с более низким разрешением для отображения. Чтобы избежать этих проблем с отображением, приложения должны использовать mipmap/ папки ресурсов для значков запуска. Система Android сохраняет эти ресурсы независимо от плотности зачистки и гарантирует, что приложения launcher могут выбирать значки с лучшим разрешением для отображения.

(от http://developer.android.com/tools/projects/index.html#mipmap)


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

вот мои два цента в попытке объяснить разницу. Есть два случая, с которыми вы имеете дело при работе с изображениями в Android:

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

  2. вы хотите загрузить изображение для плотности вашего устройства, но это изображение будет масштабироваться вверх или вниз. Например, это необходимо, когда вы хотите показать большую иконку запуска, или у вас есть анимация, которая увеличивает размер изображения. В таких случаях, чтобы обеспечить лучшее качество изображения, вы должны поместить свое изображение в mipmap. Что будет делать Android, он попытается забрать изображение из ведро более высокой плотности вместо масштабирования. Это повысит резкость (качество) изображения.

таким образом, эмпирическое правило, чтобы решить, куда поместить ваше изображение:

  • Launcher иконки на mipmap.
  • картинки, которые часто масштабирование (или чрезвычайно уменьшено) и чье качество имеет решающее значение для приложения, перейдите в mipmap также.
  • все другие изображения обычные drawables.

реализация Android mipmaps в 4.3-это именно тот метод с 1983 года, который объясняется в статье Википедии:)

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

хотя это описывается как метод для 3D-графики (поскольку он упоминает "просмотр с расстояния"), он применяется также и к 2D (переводится как "рисованное меньшее пространство", т. е. "масштабирование").

для конкретного примера Android представьте, что у вас есть представление с определенным фоном (в частности,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 на планшетах, а также некоторые пусковые установки (например, гель), запрашивают значок "на одну плотность выше", чтобы показать его больше, это должно быть сделано с помощью обычного механизма (т. е. 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:

  1. вы хотите загрузить изображение для вашего плотность устройства и вы собираетесь использовать его "как есть", без изменения его фактического размера. В этом случае вы следует работать с drawables и Android даст вам лучшую подгонку изображение.
  2. вы хотите загрузить изображение для плотности устройства, но это изображение будет масштабироваться вверх или вниз. Например, это необходимо, когда вы хотите показать большую иконку запуска, или у вас есть анимация, которая увеличивает размер изображения. В таких случаях, обеспечить самое лучшее качество изображения, вы должны поместить свое изображение в папку mipmap. Что будет делать Android, вместо этого он попытается забрать изображение из ведра с более высокой плотностью масштабирования.

так

таким образом, эмпирическое правило, чтобы решить, куда поместить ваше изображение быть:

  1. значки запуска всегда идут в папку mipmap.

  2. изображения, которые часто масштабируются (или чрезвычайно масштабируются) и качество которых имеет решающее значение для приложения, перейдите в папку mipmap как что ж.

  3. все остальные изображения являются обычными drawables.

цитата из этой статьи.


Если вы создадите APK для целевого разрешения экрана, такого как HDPI, инструмент упаковки активов Android,AAPT,может удалить чертежи для другого разрешения, которое вам не нужно.Но если он находится в папке mipmap,то эти активы останутся в APK, независимо от целевого разрешения.


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


понимание, которое у меня есть о mipmap, более или менее похоже на это:

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

Если у вас есть изображение, которое подходит для сотового телефона низкого класса, при масштабировании его до размера планшета 10 вам нужно" изобрести "пиксели, которые на самом деле не существуют. Это делается с помощью некоторого алгоритма интерполяции. Чем больше пикселей нужно придумать, тем чем дольше длится процесс, тем хуже качество. Лучшее качество получается с более сложными алгоритмами, которые занимают больше времени (например, среднее окружение пикселов против копирования ближайшего пикселя).

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

Я читал об этом в статье, объясняющей проблему производительности в libgdx при масштабировании изображений:

http://www.badlogicgames.com/wordpress/?p=1403


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/