Ich habe gegoogelt, aber ich konnte keinen Artikel finden, der den Unterschied zwischen Bitmap und Drawable in Android beschreibt.
Ich habe gegoogelt, aber ich konnte keinen Artikel finden, der den Unterschied zwischen Bitmap und Drawable in Android beschreibt.
Antworten:
Eine Bitmap ist eine Darstellung eines Bitmap-Bildes (so etwas wie java.awt.Image). Ein Drawable ist eine Abstraktion von "etwas, das gezeichnet werden kann". Es kann sich um eine Bitmap (als BitmapDrawable
) verpackt handeln , es kann sich jedoch auch um eine Volltonfarbe, eine Sammlung anderer zeichnbarer Objekte oder eine beliebige Anzahl anderer Strukturen handeln.
Die meisten Android-UI-Frameworks arbeiten gerne mit Drawable-Objekten, nicht mit Bitmap-Objekten. Eine Ansicht kann jedes Drawable als Hintergrund akzeptieren. Eine ImageView kann ein Drawable im Vordergrund anzeigen. Als Ressourcen gespeicherte Bilder werden als zeichnbare Objekte geladen.
recycle()
, stören Sie diese Beziehung. Bestenfalls wird der Zeichner nichts zeichnen; Wahrscheinlicher ist, dass später eine Ausnahme ausgelöst wird. Nach der Dokumentation , recycle()
mit API11 + die gleiche Sache tut es immer tat: sie ermöglicht es Ihnen , die nativen Pixel so schnell zu befreien , wie Sie wissen , dass Sie mit ihnen fertig sind.
recycle()
wird die native Bitmap weiterhin freigegeben. Außerdem wird der Elementpuffer auf gesetzt null
.
Drawable ist etwas, das gezeichnet werden kann. ZB Layout, Vektorbild (Linie, Kreis), Schriftart, Bild und so weiter
Bitmap - ist eine bestimmte Art von Drawable, bei der es sich um ein Bild handelt, z. B.: PNG, JPEG oder so
Bitmap ist kein Bild. Bitmap ist eine Bitkarte (Notizname: Bitmap). Und diese Karte repräsentiert Pixel, auf die Sie etwas zeichnen können. Dies kann Ihre eigene benutzerdefinierte Bitmap (kein Bild) sein, z. B. Quadrat:
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
oder Sie können ein Bitmap-Objekt aus dem Bild erstellen:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image);
Eine Bitmap ist ein Pixelhalter. Und Canvas wird verwendet, um etwas auf Ihre Bitmap zu zeichnen (auf Bitmap-Pixeln).
Alles über Drawable ist oben gut beschrieben.
TL; DR
Einige Leute schreiben, dass Sie auf Leinwand zeichnen. Sie zeichnen nicht auf Leinwand. Sie zeichnen mit der Canvas-Hilfsmethode auf Bitmap-Pixel.
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.RED) // now all bitmap pixels became red
Zeichnbare Ressource
Eine Drawable
Ressource ist ein allgemeines Konzept für eine Grafik, die auf den Bildschirm gezeichnet werden kann und die Sie mit APIs wie getDrawable(int)
oder auf eine andere XML-Ressource mit Attributen wie android:drawable
und anwenden können android:icon
. Es gibt verschiedene Arten von Zeichen:
Bitmap-Datei , Eine Bitmap-Grafikdatei (.png, .jpg oder .gif) erstellt eine BitmapDrawable
.
Nine-Patch-Datei , Eine PNG
Datei mit dehnbaren Bereichen, um die Bildgröße basierend auf dem Inhalt (.9.png) zu ändern, erstellt eine NinePatchDrawable
.
Layer List , A Drawable
, die ein Array anderer Drawable
s verwaltet. Diese werden in Array-Reihenfolge gezeichnet, sodass das Element mit dem größten Index oben gezeichnet wird LayerDrawable
.
Statusliste , Eine XML
Datei, die auf verschiedene Bitmap-Grafiken für verschiedene Status verweist (z. B. um beim Drücken einer Schaltfläche ein anderes Bild zu verwenden), erstellt eine StateListDrawable
.
Ebenenliste , Eine XML
Datei, die eine definiert Drawable
, die eine Anzahl von Alternativen verwaltet Drawable
, denen jeweils ein maximaler numerischer Wert zugewiesen wurde, erstellt eine LevelListDrawable
.
Transition Drawable , Eine XML
Datei, die eine definiert Drawable
, die zwischen zwei Drawable
Ressourcen überblenden kann , erstellt eine TransitionDrawable
.
Inset Drawable , Eine XML
Datei, die eine definiert, die eine Drawable
andere Drawable
um einen bestimmten Abstand einfügt . Dies ist nützlich, wenn ein View
Hintergrund benötigt Drawble
wird, der kleiner als die tatsächlichen Grenzen der Ansicht ist.
Clip Drawable , Eine XML
Datei, die eine definiert, die eine Drawable
andere Drawable
auf der Grundlage Drawable
des aktuellen Ebenenwerts schneidet , erstellt eine ClipDrawable
.
Scale Drawable , Eine XML
Datei, die eine definiert Drawable
, die die Größe einer anderen Drawable
basierend auf ihrem aktuellen Ebenenwert ändert , erstellt eine ScaleDrawable
.
Form zeichnbar , Eine XML
Datei, die eine geometrische Form einschließlich Farben und Verläufen definiert, erstellt eine ShapeDrawable
.
Informationen zum Erstellen einer finden Sie auch im Dokument Animationsressource AnimationDrawable
.
Hinweis: Eine Farbressource kann auch als verwendet werden , Ddrawable
in XML
. Wenn Sie beispielsweise eine erstellen StateListDrawable
, können Sie auf eine Farbressource für das android:drawable
Attribut ( android:drawable="@color/green"
) verweisen .
Bitmap
Ein Bitmap-Bild. Android unterstützt Bitmap-Dateien in drei Formaten: .png (bevorzugt), .jpg (akzeptabel), .gif (nicht empfohlen).
Sie können direkt auf eine Bitmap-Datei verweisen, indem Sie den Dateinamen als Ressourcen-ID verwenden, oder eine Alias-Ressourcen-ID in XML erstellen.
Hinweis: Bitmap-Dateien können während des Erstellungsprozesses automatisch mit verlustfreier Bildkomprimierung durch das aapt-Tool optimiert werden. Beispielsweise kann ein Echtfarben-PNG, das nicht mehr als 256 Farben benötigt, in ein 8-Bit-PNG mit einer Farbpalette konvertiert werden. Dies führt zu einem Bild gleicher Qualität, das jedoch weniger Speicher benötigt. Beachten Sie daher, dass sich die in diesem Verzeichnis platzierten Image-Binärdateien während des Builds ändern können. Wenn Sie ein Bild als Bitstrom lesen möchten, um es in eine Bitmap zu konvertieren, legen Sie Ihre Bilder res/raw/
stattdessen in dem Ordner ab, in dem sie nicht optimiert werden.