Mipmap drawables für Symbole

? Richard Le Mesurier @ | Original: StackOverFlow
---

Seit Android 4.3 können wir nun nutzen die res/mipmap Ordner " Mipmap " Bilder speichern .

z.B. Chrome für Android speichert seine Symbole in diesen Ordnern statt der normalen res/drawable Ordner .

Wie werden diese Mipmap Bilder von den anderen vertraut drawable Bilder ?

Ich sehe, dass in meinem manifestieren, verwenden wir die @mipmap/ Qualifier statt @drawable/, was Sinn macht, da die Ressource Ordnername :

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

Die https://developer.android.com/about/versions/android-4.3.html Dokument hat die folgende zu sagen :

Mit einem Mipmap als die Quelle für Ihr Bitmap oder ziehbar ist ein einfaches   Weg, um ein Qualitätsbild und verschiedene Abbildungsmaßstäbe, die zu unterbieten   besonders nützlich, wenn Sie erwarten, dass Ihr Bild, um während einer skaliert werden   Animation.

Android 4.2 ( API-Ebene 17) Unterstützung für Mipmaps in der Bitmap   Klasse - Android vertauscht die mip Bilder in Ihrem Bitmap, wenn Sie geliefert haben   eine Mipmap Quelle und haben setHasMipMap aktiviert (). Jetzt in Android 4.3 ,   Sie können Mipmaps für eine BitmapDrawable Objekt sowie zu ermöglichen, indem   Bereitstellung einer Mipmap Asset und Einstellung der Android: Mipmap -Attribut in ein   Bitmap-Ressource -Datei oder durch einen Anruf hasMipMap ().

Ich sehe nichts in gibt, die mir hilft, zu verstehen?

http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap eine android:mipMap Eigenschaft :

Boolean . Aktiviert oder deaktiviert die Mipmap Hinweis. Siehe setHasMipMap () für   weitere angaben. Standardwert ist false .

Dies gilt nicht für die Symbole, soweit ich sehen kann Werfer .

Die Frage wurde in Google Groups ( https://groups.google.com/forum/#!topic/android-developers/ZUyF0JEwibs ) angehoben, denen Romain Guy antwortete :

Es ist nützlich, um ein Bild in einer größeren Auflösung Das wäre liefern   Normalerweise berechnet werden ( beispielsweise auf einem MDPI Gerät könnte Launcher   wollen, dass die größeren hdpi Symbol, um große App -Verknüpfungen anzuzeigen. )

Ich fühle mich wie das fast sinnvoll von ihm, aber nicht ganz.

Ich bin immer noch geneigt, mit Randy Sugianto des Follow-up zu gehen :

Was sind die Vorteile davon? Gibt es eine Anleitung, wie Sie mit   Mipmaps, wahrscheinlich für eine bessere Launcher Icons ?

Natürlich http://en.wikipedia.org/wiki/Mipmap, das bezieht sich auf eine ältere Technik im Jahr 1983 erfunden, dass ich nicht ganz auf die aktuelle Android Umsetzung beziehen .

Sollten wir alle unsere App-Symbole werden die Speicherung in res/mipmap Ordner in diesen Tagen, und was sind die Leitlinien für diese Mipmap Bilder ?

Update #1

Hier ist ein Blog-Post, die es zu erklären ein wenig versucht .

http://programmium.wordpress.com/2014/03/20/mipmapping-for-drawables-in-android-4-3/

Aber die in diesem Blog-Post verwendet Bild zeigt, was aussieht wie ein Datei mit vielen Logos in ihm. Das ist nicht das, was ich in Mipmap Ordner Chrome sehen .

Ordner Chrome mipmap-hdpi enthält 3 Bilder. Eine davon ist die Chrome -Logo, für sich allein.

Mipmap drawables für Symbole

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

Vielleicht ist das alles, was es dazu - wir müssen nur größere Symbole in den Mipmap Ordner zu halten?

Update #2

Die Android Developers Blog Post von 23/10/2014 wieder bestätigt die Idee, die mipmap Ordner für die Anwendungssymbole :

http://android-developers.blogspot.com/2014/10/getting-your-apps-ready-for-nexus-6-and.html

Wenn man über die Rasterdichte Nexus 6, schreibt der Autor :

Am besten ist es Praxis, um Ihre App-Symbole in mipmap- Ordner platzieren (nicht die   drawable- Ordner ), weil sie bei Auflösungen unterschiedlich eingesetzt werden   Stromdichte der Vorrichtung . Beispielsweise kann ein xxxhdpi App-Symbol sein   auf das Startprogramm für ein xxhdpi Gerät verwendet wird.

---

Top 5 Antwort

1Kevin TeslaCoil @

Es gibt zwei unterschiedliche Verwendungen Mipmaps .

1) Für Launcher Icons beim Bau Dichte spezifischen APKs . Einige Entwickler bauen getrennte APKs für jede Dichte, um die APK Größe zu reduzieren . Doch einige Werfer ( mit einigen Geräten oder durch auf dem Play Store ausgeliefert ) verwenden größere Symbolgrößen als die Standard 48dp . Werfer benutzen getDrawableForDensity und verkleinern, wenn nötig, und nicht auf, so werden die Symbole sind von hoher Qualität . Zum Beispiel auf einer hdpi Tablette kann das Startprogramm der xhdpi Symbol laden. Indem Sie Ihr Starter-Symbol in der Mipmap - xhdpi Verzeichnis, wird es nicht, wie ein Zeichenfläche - xhdpi Verzeichnis ist beim Erstellen einer APK für hdpi Geräten abgezogen werden. Wenn Sie den Bau einer einzigen APK für alle Geräte, so wird diese nicht wirklich wichtig, wie der Launcher können die Zeichenfläche Ressourcen für die gewünschte Dichte zu gelangen.

2) Die tatsächliche Mipmap API von 4,3 . Ich habe nicht verwendet, und bin nicht mit ihm vertraut . Es wird nicht von den Android Open Source Project Werfer eingesetzt, und ich bin nicht bekannt, dass andere Trägerrakete mit .

2Juan @

Das Verständnis habe ich über Mipmap ist mehr oder weniger wie folgt aus:

Wenn ein Bild gezeichnet werden muss, da wir unterschiedliche Bildschirmgrößen sind Auflösungen werden einige Skalierung haben, daran teilzunehmen .

Wenn Sie ein Bild, das in Ordnung für ein Low-End- Handy ist, wenn Sie es an die Größe einer "Tablette 10 Sie haben " erfinden " Pixel, die nicht wirklich existieren skalieren müssen . Dies wird mit einigen Interpolations-Algorithmus durchgeführt . Die mehr Anzahl der Pixel, die erfunden werden, desto länger dauert der Vorgang und die Qualität beginnt zu versagen. Beste Qualität mit komplexeren Algorithmen, die mehr ( durchschnittlich umgebenden Bildpunkten vs kopieren Sie die nächsten Pixel zum Beispiel) zu nehmen erhalten .

Um die Anzahl der Pixel, die erfunden werden müssen zu reduzieren, mit Mipmap Sie verschiedenen Größen / rsolutions des gleichen Bildes liefern, und das System wird die nächste Bild, um die Auflösung, die erstellt werden soll, wählen Sie und führen Sie die Skalierung von dort. Dies sollte reduzieren die Anzahl der Pixel erfunden Einsparung von Ressourcen, um bei der Berechnung dieser Pixel, um eine gute Bildqualität verwendet werden.

Ich las darüber in einem Artikel, der ein Leistungsproblem in libgdx beim Skalieren von Bildern :

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

3matiash @

Die Android- Implementierung Mipmaps in 4.3 ist genau die Technik von 1983 in der Wikipedia-Artikel erklärt :)

Jede Bitmap-Bild des Mipmap -Set ist eine verkleinerte Kopie der   Hauptgefüge, aber bei einer bestimmten reduzierten Detaillierungsgrad . Obwohl die   Hauptgefüge immer noch verwendet werden, wenn der Blick ist ausreichend, um zu rendern   es in allen Einzelheiten, wird der Renderer zu einem geeigneten Bild Mipmap wechseln   (... ), Wenn die Textur aus der Ferne oder unter einem kleinen Größe angesehen .

Obwohl dies als eine Technik für 3D-Grafik beschrieben (wie erwähnt " Anzeige aus der Entfernung " ), es gilt ebenso gut in 2D (übersetzt als " gezogen wird, einen kleineren Raum ", also " heruntergerechnet ").

Für eine konkrete Android Beispiel: Sie haben eine Ansicht mit einer bestimmten Hintergrundzeichenfläche ( insbesondere eine BitmapDrawable). Sie verwenden jetzt eine Animation, um sie bis 0,15 der ursprünglichen Größe zu skalieren. Normalerweise würde dies Downscaling die Hintergrund-Bitmap für jeden Frame . Das "extreme" Downscaling kann jedoch visuelle Artefakte zu produzieren.

Sie können jedoch eine Mipmap, was bedeutet, dass das Bild bereits für einige spezifische Skalen vorgerenderte (sagen wir 1,0, 0,5 und 0,25 ) . Immer, wenn die Animation " kreuzt " den Grenzwert 0,5, anstatt an die ursprüngliche, 1,0 große Bild herunterskalieren, wird es auf die Bild 0,5 wechseln und downscale es, was ein besseres Ergebnis liefern sollte . Und so weiter als die Animation fortgesetzt.

Dies ist ein wenig theoretisch, da es tatsächlich vom Renderer geführt . Laut der Quelle der Bitmap-Klasse, es ist nur ein Hinweis und der Renderer möglicherweise nicht ehren .

/**
 * 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);
}

Ich bin mir nicht ganz sicher, warum dies besonders für Anwendungssymbole, though. Obwohl Android auf Tablets, sowie einige Werfer (zB GEL), fordern Sie ein Symbol " eine höhere Dichte ", um es größer zu zeigen, soll das mit Hilfe der regulären Mechanismus durchgeführt werden (dh drawable-xxxhdpi, & amp; c) .

4kreker @

Eine Sache, die ich in einem anderen Thread, ist darauf hinzuweisen, erwähnt - wenn Sie bauen verschiedene Versionen Ihrer Anwendung für unterschiedliche Dichten, sollten Sie über die " Mipmap " Ressourcenverzeichnis kennen. Das ist genau, wie " ziehbar " Ressourcen, außer dass es nicht in der Dichte Strippen Teilnahme bei der Erstellung der verschiedenen apk Ziele.

https://plus.google.com/105051985738280261832/posts/QTA9McYan1L