Начиная с Android 4.3 (Jelly Bean) мы теперь можем использовать res/mipmap
папки для хранения изображений «mipmap».
Например, Chrome для Android хранит свои значки в этих папках вместо обычных res/drawable
папок.
Чем эти изображения в формате MIPPAM отличаются от других известных изображений для рисования?
Я вижу, что в моем манифесте мы используем @mipmap/
классификатор вместо @drawable/
, который имеет смысл, учитывая имя папки ресурса:
<activity
android:name=".MipmapDemp"
android:icon="@mipmap/ic_launcher" />
Ссылки:
Документ API Android 4.3 содержит следующее:
Использование mip-карты в качестве источника для вашего растрового или растрового изображения - это простой способ обеспечить качественное изображение и различные масштабы изображения, что может быть особенно полезно, если вы ожидаете, что ваше изображение будет масштабироваться во время анимации.
В Android 4.2 (уровень API 17) добавлена поддержка mipmaps в классе Bitmap - Android меняет изображения mip в своем Bitmap, когда вы указали источник mipmap и включили setHasMipMap (). Теперь в Android 4.3 вы также можете включить mipmaps для объекта BitmapDrawable, предоставив актив mipmap и установив атрибут android: mipMap в файле ресурсов растрового изображения или вызвав hasMipMap ().
Я не вижу там ничего, что помогло бы мне понять.
Ресурсы XML Bitmap имеют android:mipMap
свойство:
Boolean. Включает или отключает подсказку mipmap. Смотрите setHasMipMap () для получения дополнительной информации. Значением по умолчанию является false.
Насколько я вижу, это не относится к значкам запуска.
Был задан вопрос о группах Google ( цель названия ресурса "mipmap" ?! ), на что Romain Guy ответил:
Полезно предоставить изображение с более высоким разрешением, которое обычно рассчитывается (например, на устройстве с поддержкой mdpi Launcher может захотеть, чтобы на значке большего размера hdpi отображались ярлыки больших приложений).
Я чувствую, что это почти имеет смысл, но не совсем.
Я все еще склонен пойти с продолжением Рэнди Сугианто:
Каковы преимущества этого? Есть ли какое-нибудь руководство, как использовать mipmaps, возможно, для лучших иконок запуска?
Конечно, в Википедии есть страница для «Mipmap» , которая относится к более старой методике, изобретенной в 1983 году, которую я не совсем могу связать с текущей реализацией Android.
Должны ли мы хранить все наши значки приложений в res/mipmap
папках в эти дни, и каковы рекомендации для этих изображений MipMap?
Обновление № 1
Вот пост в блоге, который пытается объяснить это немного.
Но изображение, использованное в этом посте, показывает, что выглядит как один файл с множеством логотипов. Это не то, что я вижу в папке Chrome MipMap.
mipmap-hdpi
Папка Chrome содержит три изображения. Одним из них является логотип Chrome, сам по себе.
Как ни странно, это 72х72, а не 48х48, что я ожидал увидеть.
Возможно, это все, что нужно для этого - нам просто нужно держать большие значки в папках mipmap?
Обновление № 2
В блоге разработчиков Android от 23.10.2014 снова подтверждается идея использования mipmap
папок для значков приложений:
Говоря о плотности экрана Nexus 6, автор пишет:
Рекомендуется размещать значки приложений в папках mipmap (не в папках drawable), поскольку они используются с разрешением, отличным от текущей плотности устройства. Например, значок приложения xxxhdpi можно использовать на панели запуска для устройства xxhdpi.
Обновление № 3
Обратите внимание, что Android Studio создает ic_launcher.png
значки в mipmap...
папках, а неdrawable...
папках, в которых Eclipse использовал их для создания.
источник
Похоже, Google обновил свои документы с тех пор, как все эти ответы, так что, надеюсь, это поможет кому-то еще в будущем :) Просто столкнулся с этим вопросом сам, создавая новый (новый новый) проект.
TL; DR: отрисовки можно удалить как часть оптимизации ресурсов, специфичных для dp. Mipmaps не будут удалены.
(с http://developer.android.com/tools/projects/index.html#mipmap )
источник
Вот мои два цента в попытке объяснить разницу. Есть два случая, с которыми вы сталкиваетесь при работе с изображениями в Android:
Вы хотите загрузить изображение для плотности вашего устройства, и вы собираетесь использовать его «как есть», не меняя его фактический размер . В этом случае вы должны работать с рисованными объектами, и Android даст вам наиболее подходящее изображение.
Вы хотите загрузить изображение для плотности вашего устройства, но это изображение будет увеличено или уменьшено . Например, это необходимо, когда вы хотите показать значок запуска большего размера или у вас есть анимация, которая увеличивает размер изображения. В таких случаях, чтобы обеспечить наилучшее качество изображения, вы должны поместить свое изображение в папку mipmap . Что Android сделает, так это попытается взять изображение из корзины с более высокой плотностью, а не масштабировать его. Это повысит резкость (качество) изображения.
Таким образом, эмпирическое правило, чтобы решить, куда поместить ваше изображение, будет:
источник
Реализация mipmaps для Android в 4.3 - это именно та техника 1983 года, которая описана в статье в Википедии :)
Хотя это описывается как метод для трехмерной графики (поскольку в нем упоминается «просмотр с расстояния»), оно также применимо и к 2D (переводится как «нарисовано - это меньшее пространство», то есть «уменьшен масштаб»).
Для конкретного примера Android представьте, что у вас есть представление с определенным фоном для рисования (в частности, a
BitmapDrawable
). Теперь вы используете анимацию, чтобы масштабировать ее до 0,15 от ее первоначального размера. Обычно для этого требуется уменьшить фоновое изображение для каждого кадра. Однако это «экстремальное» уменьшение масштаба может привести к визуальным артефактам.Вы можете, однако, предоставить mipmap, что означает, что изображение уже предварительно отрендерено для нескольких конкретных масштабов (скажем, 1,0, 0,5 и 0,25). Всякий раз, когда анимация «пересекает» порог 0,5, вместо того, чтобы продолжать уменьшать исходное изображение размером 1,0, она переключается на изображение 0,5 и уменьшает его, что должно обеспечить лучший результат. И так далее, анимация продолжается.
Это немного теоретически, так как на самом деле это делает рендер. Согласно источнику класса Bitmap, это всего лишь подсказка, и средство визуализации может или не может соблюдать его.
Я не совсем уверен, почему это было бы особенно подходящим для значков приложений, хотя. Хотя Android на планшетах, а также некоторые программы запуска (например, GEL) запрашивают значок «на одну плотность выше», чтобы показать его больше, это предполагается сделать с помощью обычного механизма (т. Е.
drawable-xxxhdpi
& C).источник
drawable
папок, которые также содержат изображения с разметкой.drawable-nostrip
или что-то.https://plus.google.com/105051985738280261832/posts/QTA9McYan1L
источник
Поскольку я искал разъясняющий ответ на этот вопрос, чтобы определить правильный тип значков уведомлений, я хотел бы добавить это четкое утверждение в тему. Это от http://developer.android.com/tools/help/image-asset-studio.html#saving
источник
Цитата из этой статьи.
источник
При создании отдельных apks для разных плотностей, извлекаемые папки для других плотностей удаляются. Это заставит значки выглядеть размытыми на устройствах, которые используют значки запуска более высокой плотности. Поскольку папки mipmap не удаляются, всегда лучше использовать их для включения значков запуска.
источник
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/
источник
drawable-XXX
иmipmap-XXX
папками очень хорошо: значок запуска отличается от других ресурсов, так как возможно, что значок с более высоким разрешением отображается в панели запуска пользователей. Если это изображение с более высоким разрешением было извлечено из папки Drawables, то значок с более низкой плотностью будет программно увеличен. Это может вызвать непривлекательный размытый значок.Если вы создаете APK для целевого разрешения экрана, такого как HDPI, инструмент упаковки ресурсов Android, AAPT, может вырезать чертежи для других разрешений, которые вам не нужны. Но если он находится в папке mipmap, то эти ресурсы останутся в APK вне зависимости от целевого разрешения.
источник
Понимание, которое я имею о mipmap, более или менее похоже на это:
Когда необходимо нарисовать изображение, учитывая, что у нас разные размеры экрана, мы должны принять участие в некотором масштабировании.
Если у вас есть изображение, которое подходит для мобильного телефона низкого уровня, когда вы масштабируете его до размера 10-дюймового планшета, вы должны «изобрести» пиксели, которые на самом деле не существуют. Это делается с помощью некоторого алгоритма интерполяции. Чем больше пикселей нужно изобрести, тем дольше длится процесс, и качество начинает падать. Наилучшее качество достигается с более сложными алгоритмами, которые занимают больше времени (например, среднее число окружающих пикселей по сравнению с копированием ближайшего пикселя).
Чтобы уменьшить количество пикселей, которые нужно изобрести, с помощью mipmap вы предоставляете разные размеры / разрешения одного и того же изображения, и система выберет ближайшее изображение с разрешением, которое должно быть визуализировано, и выполнит масштабирование оттуда. Это должно уменьшить количество изобретенных пикселей, экономя ресурсы, которые будут использоваться при расчете этих пикселей для обеспечения хорошего качества изображения.
Я читал об этом в статье, объясняющей проблему производительности в libgdx при масштабировании изображений:
http://www.badlogicgames.com/wordpress/?p=1403
источник