Ich möchte ein bestimmtes Drawable
Hintergrundbild für das Gerät festlegen , aber alle Hintergrundbildfunktionen akzeptieren Bitmap
nur s. Ich kann nicht verwenden, WallpaperManager
weil ich vor 2.1 bin.
Außerdem werden meine Drawables aus dem Internet heruntergeladen und befinden sich nicht in R.drawable
.
android
bitmap
wallpaper
android-drawable
rauben
quelle
quelle
Antworten:
Dieser Code hilft.
Hier eine Version, in der das Bild heruntergeladen wird.
quelle
quelle
getIntrinsicWidth()
undgetIntrinsicHieght()
gibt -1 zurück, wenn Drawable einfarbig ist.Dadurch wird eine BitmapDrawable in eine Bitmap konvertiert.
quelle
BitmapDrawable
bevor Sie ihn wirken:if (d instanceof BitmapDrawable) { Bitmap bitmap = ((BitmapDrawable)d).getBitmap(); }
d
bereits ein Code istBitmapDrawable
. In diesem Fall ist es trivial, ihn als Bitmap abzurufen.ClassCastException
In allen anderen Fällen stürzt er ab .A
Drawable
kann auf a gezeichnetCanvas
werden und aCanvas
kann durch a unterstützt werdenBitmap
:(Aktualisiert, um eine schnelle Konvertierung für
BitmapDrawable
s durchzuführen und sicherzustellen, dass dieBitmap
erstellte Größe eine gültige Größe hat.)quelle
METHODE 1 : Entweder können Sie direkt in eine Bitmap wie diese konvertieren
METHODE 2 : Sie können die Ressource sogar in eine Zeichnungsdatei konvertieren und daraus eine Bitmap wie diese erhalten
Für API> 22 wurde die
getDrawable
Methode in dieResourcesCompat
Klasse verschoben, damit Sie so etwas tunquelle
android.graphics.drawable.VectorDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
sehr einfach
quelle
Nach dem Betrachten (und Verwenden) der anderen Antworten scheinen sie alle schlecht
ColorDrawable
undPaintDrawable
schlecht zu handhaben . (Besonders bei Lutschern) schien, dassShader
s so optimiert wurden, dass feste Farbblöcke nicht richtig gehandhabt wurden.Ich verwende jetzt den folgenden Code:
Im Gegensatz zu den anderen wird die Bitmap in der richtigen Größe gezeichnet , wenn Sie
setBounds
dieDrawable
vorherige Aufforderung zur Umwandlung in eine Bitmap aufrufen !quelle
Drawable
keine Grenzen festgelegt sind, wird das verwendetIntrinsicWidth/Height
. Wenn beide <= 0 sind, setzen wir die Zeichenfläche auf 1px. Sie haben Recht, wenn dasDrawable
keine Grenzen hat, wird es einige übergeben (1x1 ist in den meisten Fällen), aber dies ist für Dinge wie solche erforderlich,ColorDrawable
die KEINE intrinsischen Größen haben. Wenn wir dies nicht tun würden, würde es ein werfenException
, Sie können 0x0 nicht auf eine Leinwand zeichnen.mutate()
würde eine Kopie erstellen, die das Original in Ruhe lässt, was das Problem der Rückgabe in die ursprünglichen Grenzen zunichte machen würde. Ich ändere den Code selten basierend auf diesen Punkten. Wenn Ihr Anwendungsfall dies erfordert, fügen Sie eine weitere Antwort hinzu. Ich schlage vor, Sie erstellen eine weitere Frage für die Bitmap-Skalierung.Vielleicht hilft das jemandem ...
Verwenden Sie von PictureDrawable zu Bitmap:
... als solche implementiert:
quelle
Drawable
, in diesem Fall aPictureDrawable
.Hier ist eine bessere Auflösung
Code aus Wie man zeichnbare Bits als InputStream liest
quelle
1) auf Bitmap zeichnbar:
2) Bitmap zu Drawable:
quelle
Hier ist die nette Kotlin-Version der Antwort von @ Chris.Jenkins hier: https://stackoverflow.com/a/27543712/1016462
quelle
android-ktx hat folgende
Drawable.toBitmap
Methode: https://android.github.io/android-ktx/core-ktx/androidx.graphics.drawable/android.graphics.drawable.-drawable/to-bitmap.htmlVon Kotlin
quelle
VectorDrawable
in Kotlin! Auch in diesem SO-Beitrag hier ausführlicher geteilt.Android bietet eine nicht gerade Vorwärtslösung :
BitmapDrawable
. Um die Bitmap zu erhalten, müssen wir die Ressourcen-IDR.drawable.flower_pic
für a angebenBitmapDrawable
und sie dann in a umwandelnBitmap
.quelle
Verwenden Sie diesen Code. Er hilft Ihnen beim Erreichen Ihres Ziels.
quelle
BitmapFactory.decodeResource()
Skaliert die Bitmap automatisch, sodass Ihre Bitmap möglicherweise unscharf wird. Gehen Sie folgendermaßen vor, um eine Skalierung zu verhindern:oder
quelle
Wenn Sie Kotlin verwenden, verwenden Sie den folgenden Code. es wird funktionieren
// zur Verwendung des Bildpfads
quelle
Die neueste AndroidX-Kernbibliothek (androidx.core: core-ktx: 1.2.0) verfügt jetzt über eine Erweiterungsfunktion:
Drawable.toBitmap(...)
Konvertieren eines Drawable in eine Bitmap.quelle
quelle
ImageWorker Library kann Bitmap in Drawable oder Base64 konvertieren und umgekehrt.
Implementierung
In Projektebene Gradle
In Application Level Gradle
Sie können Bitmaps / Drawables / Base64-Bilder auch von außen speichern und abrufen.
Überprüfe hier. https://github.com/1AboveAll/ImageWorker/edit/master/README.md
quelle