Seit Android 4.3 (Jelly Bean) können wir jetzt die res/mipmap
Ordner zum Speichern von "Mipmap" -Bildern verwenden.
Beispielsweise 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 bekannten zeichnbaren Bildern?
Ich sehe, dass wir in meinem Manifest @mipmap/
stattdessen das Qualifikationsmerkmal verwenden @drawable/
, was angesichts des Namens des Ressourcenordners sinnvoll ist:
<activity
android:name=".MipmapDemp"
android:icon="@mipmap/ic_launcher" />
Verweise:
Das Android 4.3 APIs- Dokument enthält Folgendes:
Die Verwendung einer Mipmap als Quelle für Ihre Bitmap oder zum Zeichnen ist eine einfache Möglichkeit, ein qualitativ hochwertiges Bild und verschiedene Bildskalen bereitzustellen. Dies kann besonders nützlich sein, wenn Sie erwarten, dass Ihr Bild während einer Animation skaliert wird.
Android 4.2 (API-Stufe 17) hat die Unterstützung für Mipmaps in der Bitmap-Klasse hinzugefügt. Android tauscht die Mip-Bilder in Ihrer Bitmap aus, wenn Sie eine Mipmap-Quelle angegeben und setHasMipMap () aktiviert haben. In Android 4.3 können Sie jetzt auch Mipmaps für ein BitmapDrawable-Objekt aktivieren, indem Sie ein Mipmap-Asset bereitstellen und das Attribut android: mipMap in einer Bitmap-Ressourcendatei festlegen oder hasMipMap () aufrufen.
Ich sehe dort nichts, was mir hilft zu verstehen.
XML-Bitmap-Ressourcen haben eine android:mipMap
Eigenschaft:
Boolescher Wert. Aktiviert oder deaktiviert den Mipmap-Hinweis. Weitere Informationen finden Sie unter setHasMipMap (). Der Standardwert ist false.
Dies gilt meines Erachtens nicht für Startsymbole.
Die Frage wurde in Google Groups gestellt ( Der Zweck des Ressourcennamens "mipmap"?! ), Worauf Romain Guy antwortete:
Es ist nützlich, ein Bild mit einer größeren Auflösung bereitzustellen, die normalerweise berechnet wird (auf einem mdpi-Gerät möchte Launcher beispielsweise, dass das größere hdpi-Symbol große App-Verknüpfungen anzeigt.)
Ich denke, das macht fast Sinn, aber nicht ganz.
Ich bin immer noch geneigt, Randy Sugiantos Follow-up zu folgen:
Was sind die Vorteile davon? Gibt es eine Anleitung zur Verwendung von Mipmaps, wahrscheinlich für bessere Startsymbole?
Natürlich hat Wikipedia eine Seite für "Mipmap" , die sich auf eine ältere Technik bezieht, die 1983 erfunden wurde und die ich nicht ganz mit der aktuellen Android-Implementierung in Verbindung bringen kann.
Sollten wir heutzutage alle unsere App-Symbole in res/mipmap
Ordnern speichern und welche Richtlinien gelten für diese Mipmap-Bilder?
Update Nr. 1
Hier ist ein Blog-Beitrag, der versucht, es ein wenig zu erklären.
Das in diesem Blogbeitrag verwendete Bild zeigt jedoch, wie eine Datei mit vielen Logos aussieht. Dies ist nicht das, was ich im Mipmap-Ordner von Chrome sehe.
Der Chrome- mipmap-hdpi
Ordner enthält drei Bilder. Eines ist das Chrome-Logo für sich.
Seltsamerweise ist es 72x72, nicht 48x48, was ich erwarten würde.
Vielleicht ist das alles, was dazu gehört - wir müssen nur größere Symbole in den Mipmap-Ordnern behalten?
Update Nr. 2
Der Android Developers Blog-Beitrag vom 23.10.2014 bestätigt erneut die Idee, die mipmap
Ordner für Anwendungssymbole zu verwenden:
Wenn der Autor über die Bildschirmdichte des Nexus 6 spricht, schreibt er:
Es wird empfohlen, Ihre App-Symbole in Mipmap-Ordnern (nicht in den Zeichenordnern) zu platzieren, da sie mit anderen Auflösungen als der aktuellen Dichte des Geräts verwendet werden. Beispielsweise kann ein xxxhdpi-App-Symbol auf dem Launcher für ein xxhdpi-Gerät verwendet werden.
Update Nr. 3
Beachten Sie, dass Android Studio die ic_launcher.png
Symbole in den mipmap...
Ordnern erstellt und nicht die drawable...
Ordner, in denen Eclipse sie erstellt hat.
quelle
Es scheint, dass Google seine Dokumente seit all diesen Antworten aktualisiert hat. Hoffentlich hilft dies in Zukunft jemand anderem :) Ich bin gerade auf diese Frage gestoßen, als ich ein neues (neues) Projekt erstellt habe.
TL; DR: Drawables können im Rahmen der dp-spezifischen Ressourcenoptimierung entfernt werden. Mipmaps werden nicht entfernt.
(von http://developer.android.com/tools/projects/index.html#mipmap )
quelle
Hier sind meine zwei Cent, um den Unterschied zu erklären. Es gibt zwei Fälle, mit denen Sie sich bei der Arbeit mit Bildern in Android befassen:
Sie möchten ein Bild für Ihre Gerätedichte laden und es "wie es ist" verwenden, ohne die tatsächliche Größe zu ändern . In diesem Fall sollten Sie mit Drawables arbeiten und Android liefert Ihnen das am besten passende Bild.
Sie möchten ein Bild für Ihre Gerätedichte laden, dieses Bild wird jedoch vergrößert oder verkleinert . Dies ist beispielsweise erforderlich, wenn Sie ein größeres Startsymbol anzeigen möchten oder wenn Sie eine Animation haben, die die Bildgröße erhöht. In solchen Fällen sollten Sie Ihr Bild in einen Mipmap- Ordner legen, um die beste Bildqualität zu gewährleisten . Android versucht, das Bild aus einem Bucket mit höherer Dichte aufzunehmen, anstatt es zu vergrößern. Dies erhöht die Schärfe (Qualität) des Bildes.
Die Faustregel für die Entscheidung, wo Ihr Bild abgelegt werden soll, lautet daher:
quelle
Die Android-Implementierung von Mipmaps in 4.3 ist genau die Technik aus dem Jahr 1983, die im Wikipedia-Artikel erklärt wurde :)
Obwohl dies als eine Technik für 3D-Grafiken beschrieben wird (da "aus der Ferne betrachtet" erwähnt wird), gilt dies auch für 2D (übersetzt als "gezeichnet ist ein kleinerer Raum", dh "verkleinert").
Stellen Sie sich für ein konkretes Android-Beispiel vor, Sie hätten eine Ansicht mit einem bestimmten Hintergrund, der gezeichnet werden kann (insbesondere a
BitmapDrawable
). Sie verwenden jetzt eine Animation, um sie auf 0,15 ihrer ursprünglichen Größe zu skalieren. Normalerweise würde dies das Herunterskalieren der Hintergrundbitmap für jeden Frame erfordern. Diese "extreme" Verkleinerung kann jedoch zu visuellen Artefakten führen.Sie können jedoch eine Mipmap bereitstellen. Dies bedeutet, dass das Bild bereits für einige bestimmte Maßstäbe vorgerendert wurde (z. B. 1,0, 0,5 und 0,25). Wenn die Animation den Schwellenwert von 0,5 "überschreitet", anstatt das ursprüngliche Bild mit der Größe 1,0 weiter zu verkleinern, wechselt sie zum Bild mit 0,5 und verkleinert es, was zu einem besseren Ergebnis führen sollte. Und so weiter, während die Animation fortgesetzt wird.
Dies ist ein bisschen theoretisch, da es tatsächlich vom Renderer gemacht wird. Laut der Quelle der Bitmap-Klasse ist dies nur ein Hinweis, und der Renderer kann ihn berücksichtigen oder auch nicht.
Ich bin mir nicht ganz sicher, warum dies besonders für Anwendungssymbole geeignet ist. Obwohl Android auf Tablets sowie einige Starter (z. B. GEL) ein Symbol "eine Dichte höher" anfordern, um es größer anzuzeigen, sollte dies mithilfe des regulären Mechanismus (z. B.
drawable-xxxhdpi
& c) erfolgen.quelle
drawable
Ordnern, die auch Mipmapped-Bilder enthalten.drawable-nostrip
oder so.https://plus.google.com/105051985738280261832/posts/QTA9McYan1L
quelle
Da ich nach einer klarstellenden Antwort darauf gesucht habe, um den richtigen Typ für Benachrichtigungssymbole zu bestimmen, möchte ich diese klare Aussage zum Thema hinzufügen. Es ist von http://developer.android.com/tools/help/image-asset-studio.html#saving
quelle
Wenn Sie separate Apks für unterschiedliche Dichten erstellen, werden Zeichenordner für andere Dichten entfernt. Dadurch werden die Symbole auf Geräten, die Startsymbole mit höherer Dichte verwenden, verschwommen. Da Mipmap-Ordner nicht entfernt werden, ist es immer am besten, sie zum Einfügen der Startsymbole zu verwenden.
quelle
Zitat aus diesem Artikel.
quelle
MipMap für App-Symbol für Launcher
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/
quelle
drawable-XXX
undmipmap-XXX
Ordnern sehr gut: Das Startsymbol unterscheidet sich von anderen Ressourcen, da möglicherweise ein Symbol mit höherer Auflösung im Starter des Benutzers angezeigt wird. Wenn dieses Bild mit höherer Auflösung aus Ihrem Zeichnungsordner entfernt wurde, wird ein Symbol mit niedrigerer Dichte programmgesteuert hochskaliert. Dies kann zu einem unattraktiven verschwommenen Symbol führen.Wenn Sie eine APK für eine Zielbildschirmauflösung wie HDPI erstellen, kann das Android-Asset-Packaging-Tool AAPT die Zeichen für eine andere Auflösung entfernen, die Sie nicht benötigen. Wenn sie sich jedoch im Ordner mipmap befindet, bleiben diese Assets im APK, unabhängig von der Zielauflösung.
quelle
Das Verständnis, das ich über Mipmap habe, ist mehr oder weniger so:
Wenn ein Bild gezeichnet werden muss, müssen einige Skalierungen vorgenommen werden, da wir unterschiedliche Bildschirmgrößen und Auflösungen haben.
Wenn Sie ein Bild haben, das für ein Low-End-Handy in Ordnung ist, müssen Sie beim Skalieren auf die Größe eines 10-Zoll-Tablets Pixel "erfinden", die tatsächlich nicht vorhanden sind. Dies geschieht mit einem Interpolationsalgorithmus Je mehr Pixel erfunden werden müssen, desto länger dauert der Prozess und die Qualität beginnt zu versagen. Die beste Qualität wird mit komplexeren Algorithmen erzielt, die länger dauern (Durchschnitt der umgebenden Pixel im Vergleich zum Kopieren des nächsten Pixels zum Beispiel).
Um die Anzahl der zu erfindenden Pixel zu verringern, stellen Sie mit mipmap verschiedene Größen / Auflösungen desselben Bildes bereit, und das System wählt das Bild aus, das der zu rendernden Auflösung am nächsten kommt, und skaliert von dort aus. Dies sollte die Anzahl der erfundenen Pixel reduzieren, die Ressourcen sparen, die bei der Berechnung dieser Pixel verwendet werden müssen, um ein Bild von guter Qualität bereitzustellen.
Ich habe darüber in einem Artikel gelesen, in dem ein Leistungsproblem in libgdx beim Skalieren von Bildern erläutert wird:
http://www.badlogicgames.com/wordpress/?p=1403
quelle