Ich habe gegoogelt, aber ich konnte keinen Artikel finden, der den Unterschied zwischen Bitmap und Drawable in Android beschreibt.
android
android-drawable
terminology
android-bitmap
Nikhil C George
quelle
quelle
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.
quelle
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 gesetztnull
.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
quelle
android.graphics.Bitmap
) ist keine Unterklasse von Drawable (android.graphics.drawable.Drawable
).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:
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
quelle
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 wiegetDrawable(int)
oder auf eine andere XML-Ressource mit Attributen wieandroid:drawable
und anwenden könnenandroid: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 eineNinePatchDrawable
.Layer List , A
Drawable
, die ein Array andererDrawable
s verwaltet. Diese werden in Array-Reihenfolge gezeichnet, sodass das Element mit dem größten Index oben gezeichnet wirdLayerDrawable
.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 eineStateListDrawable
.Ebenenliste , Eine
XML
Datei, die eine definiertDrawable
, die eine Anzahl von Alternativen verwaltetDrawable
, denen jeweils ein maximaler numerischer Wert zugewiesen wurde, erstellt eineLevelListDrawable
.Transition Drawable , Eine
XML
Datei, die eine definiertDrawable
, die zwischen zweiDrawable
Ressourcen überblenden kann , erstellt eineTransitionDrawable
.Inset Drawable , Eine
XML
Datei, die eine definiert, die eineDrawable
andereDrawable
um einen bestimmten Abstand einfügt . Dies ist nützlich, wenn einView
Hintergrund benötigtDrawble
wird, der kleiner als die tatsächlichen Grenzen der Ansicht ist.Clip Drawable , Eine
XML
Datei, die eine definiert, die eineDrawable
andereDrawable
auf der GrundlageDrawable
des aktuellen Ebenenwerts schneidet , erstellt eineClipDrawable
.Scale Drawable , Eine
XML
Datei, die eine definiertDrawable
, die die Größe einer anderenDrawable
basierend auf ihrem aktuellen Ebenenwert ändert , erstellt eineScaleDrawable
.Form zeichnbar , Eine
XML
Datei, die eine geometrische Form einschließlich Farben und Verläufen definiert, erstellt eineShapeDrawable
.Informationen zum Erstellen einer finden Sie auch im Dokument Animationsressource
AnimationDrawable
.Hinweis: Eine Farbressource kann auch als verwendet werden ,
Ddrawable
inXML
. Wenn Sie beispielsweise eine erstellenStateListDrawable
, können Sie auf eine Farbressource für dasandroid: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.quelle