474 Stimmen

Mipmap-Zeichnungen für Symbole

Seit Android 4.3 (Jelly Bean) können wir jetzt die res/mipmap-Ordner verwenden, um "mipmap"-Bilder zu speichern.

Zum Beispiel speichert Chrome für Android seine Symbole in diesen Ordnern anstelle der normaleren res/drawable-Ordner.

Wie unterscheiden sich diese mipmap-Bilder von den anderen vertrauten drawable-Bildern?

Ich sehe, dass wir in meinem Manifest den @mipmap/-Qualifier verwenden, anstatt @drawable/, was angesichts des Namens des Ressourcenordners Sinn macht:


Referenzen:

Das Dokument zu den Android 4.3 APIs sagt folgendes:

Die Verwendung eines Mipmap als Quelle für Ihr Bitmap oder Drawable ist eine einfache Möglichkeit, ein qualitativ hochwertiges Bild und verschiedene Bildskalen bereitzustellen, was besonders nützlich sein kann, wenn Sie erwarten, dass Ihr Bild während einer Animation skaliert wird.

Android 4.2 (API-Level 17) fügte Unterstützung für Mipmaps in der Bitmap-Klasse hinzu - Android tauscht die Mip-Bilder in Ihrer Bitmap aus, wenn Sie eine Mipmap-Quelle bereitgestellt haben und setHasMipMap() aktiviert haben. Jetzt können Sie in Android 4.3 auch Mipmaps für ein BitmapDrawable-Objekt aktivieren, indem Sie ein Mipmap-Asset bereitstellen und das android:mipMap-Attribut in einer Bitmap-Ressourcendatei setzen oder hasMipMap() aufrufen.

Ich sehe dort nichts, was mir hilft, das zu verstehen.


XML-Bitmap-Ressourcen haben eine android:mipMap-Eigenschaft:

Boolean. Aktiviert oder deaktiviert den Mipmap-Hinweis. Weitere Informationen finden Sie unter setHasMipMap(). Der Standardwert ist falsch.

Dies gilt meiner Meinung nach nicht für Launcher-Symbole.


Die Frage wurde in der Google Groups (Der Zweck des Ressourcennamens "mipmap" ?!) gestellt, auf die Romain Guy antwortete:

Es ist nützlich, ein Bild in einer größeren Auflösung bereitzustellen, das normalerweise berechnet würde (beispielsweise möchte der Launcher auf einem mdpi-Gerät das größere hdpi-Symbol anzeigen, um große App-Verknüpfungen anzuzeigen.)

Ich habe das Gefühl, dass das fast Sinn macht, aber nicht ganz.

Ich neige immer noch zu Randys Sugiantos Nachfrage:

Was sind die Vorteile davon? Gibt es eine Anleitung zum Verwenden von Mipmaps, möglicherweise für bessere Launcher-Symbole?


Natürlich hat Wikipedia eine Seite für "Mipmap", die sich auf eine ältere Technik bezieht, die 1983 erfunden wurde und mit der aktuellen Android-Implementierung nicht ganz in Verbindung zu bringen ist.


Sollten wir heute alle unsere App-Symbole in res/mipmap-Ordnern speichern und was sind die Richtlinien für diese Mipmap-Bilder?


Aktualisierung #1

Hier ist ein Blog-Beitrag, der versucht, es ein wenig zu erklären.

Aber das Bild, das in diesem Blog-Beitrag verwendet wird, zeigt, was wie eine Datei mit vielen Logos aussieht. Das ist nicht das, was ich im Mipmap-Ordner von Chrome sehe.

Im mipmap-hdpi-Ordner von Chrome befinden sich drei Bilder. Eins ist das Chrome-Logo, alleine.

Chrome mipmap-hdpi icon.png

Seltsamerweise ist es 72x72, nicht 48x48, was ich erwarten würde zu sehen.

Vielleicht ist das alles, was es dazu gibt - wir müssen einfach größere Symbole in den Mipmap-Ordnern aufbewahren?


Aktualisierung #2

Der Blog-Beitrag der Android-Entwickler vom 23.10.2014 bestätigt erneut die Idee, die mipmap-Ordner für Anwendungssymbole zu verwenden:

Bei der Diskussion über die Bildschirmdichte des Nexus 6 schreibt der Autor:

Es ist bewährte Praxis, Ihre App-Symbole in den mipmap-Ordnern (nicht den drawable-Ordnern) zu platzieren, da sie in Auflösungen verwendet werden, die sich von der aktuellen Dichte des Geräts unterscheiden. Zum Beispiel kann ein xxxhdpi-App-Symbol auf dem Launcher für ein xxhdpi-Gerät verwendet werden.


Aktualisierung #3

Beachten Sie, dass Android Studio die ic_launcher.png-Symbole in den mipmap...-Ordnern erstellt, anstatt in den drawable...-Ordnern, in denen Eclipse sie zu erstellen pflegte.


1voto

Evan Punkte 214

Wenn Sie eine APK für eine Zielbildschirmauflösung wie HDPI erstellen, kann das Android-Asset-Paketierungstool, AAPT, die Zeichnungen für andere Auflösungen, die Sie nicht benötigen, entfernen. Aber wenn sie sich im Mappenordner befinden, bleiben diese Assets in der APK, unabhängig von der Zielauflösung.

-1voto

Juan Punkte 5432

Das Verständnis, das ich über Mipmap habe, ist mehr oder weniger so:

Wenn ein Bild gezeichnet werden muss, da wir verschiedene Bildschirmgrößen und -auflösungen haben, muss eine gewisse Skalierung erfolgen.

Wenn Sie ein Bild haben, das für ein Low-End-Handy geeignet ist, und es auf die Größe eines 10-Zoll-Tablets skalieren, müssen Sie "Pixel erfinden", die tatsächlich nicht existieren. Dies geschieht mit einem Interpolationsalgorithmus. Je mehr Pixel erfunden werden müssen, desto länger dauert der Prozess und die Qualität beginnt zu leiden. Die beste Qualität wird mit komplexeren Algorithmen erzielt, die länger dauern (Durchschnitt der umliegenden Pixel gegenüber Kopieren des nächsten Pixels zum Beispiel).

Um die Anzahl der erfundenen Pixel zu reduzieren, stellen Sie mit Mipmap verschiedene Größen/Auflösungen desselben Bildes zur Verfügung, und das System wählt das nächstgelegene Bild zur Auflösung aus, die gerendert werden muss, und führt von dort aus die Skalierung durch. Dies sollte die Anzahl der erfundenen Pixel reduzieren und Ressourcen sparen, die zur Berechnung dieser Pixel verwendet werden, um ein qualitativ hochwertiges Bild bereitzustellen.

Ich habe darüber in einem Artikel gelesen, der ein Leistungsproblem in libgdx beim Skalieren von Bildern erklärt:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X