von Drawable zu Bitmap konvertieren?

  • Antworten:1
Marco S.
  • Forum-Beiträge: 105

28.02.2010, 13:49:45 via Website

Liebe Entwickler,

wie kann ich von einem Drawable zu einem Bitmap konvertieren?


Vielleicht stell ich die Frage so kompliziert, wie ich sie hier gerade habe.

Also ich hab eine eigene Klasse OnOffButton die von Button erbt.

Mittels attrs.xml definiere ich mir Parameter:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="OnOffButton">
<attr name="iBitmap" format="reference" />
<attr name="iMovementRate" format="integer" />
</declare-styleable>
</resources>

Diese möchte ich nun auslesen.

So weit kein Problem.

int iMovementRate;
Drawable drwOnOff;
Bitmap iBitmap;

TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.OnOffButton);

// defined in values/attrs.xml, value in main.xml
iMovementRate = ta.getInteger(R.styleable.OnOffButton_iMovementRate, 55);

// defined in values/attrs.xml, value in main.xml
drwOnOff = ta.getDrawable( R.styleable.OnOffButton_iBitmap );
if( drwOnOff == null ) {
drwOnOff = getResources().getDrawable(R.drawable.on_off);
}

Nun brauch ich aber das Drawable noch als Bitmap.

Hardcodiert würde ich folgendes tun:
iBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.on_off);

Aber damit geht mir mein Parameter flöten.

iBitmap = BitmapFactory.decodeResource(getResources(), R.styleable.OnOffButton_iBitmap);
Damit gehts leider nicht :(

Also wie lade ich ein Bitmap aus den Stylables? Oder wie konvertiere ich das bereits erfolgreich geladene Drawable zu einem Bitmap?

Gruß
Marco

Antworten
Jörg Jahnke
  • Forum-Beiträge: 5

01.03.2010, 14:25:06 via Website

Vielleicht hilft Dir folgender Code weiter:

// bitmap mit Größe des Drawables erzeugen
Bitmap myBitmap = Bitmap.createBitmap(drwOnOff.getIntrinsicWidth(), drwOnOff.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
// über das Canvas wird in die Bitmap gezeichnet
Canvas c = new Canvas(myBitmap);
// Ausgabe des Drawables, danach ist die Bitmap mit dem Inhalt des Drawables gefüllt
drwOnOff.draw(c);

Antworten