2012-06-09 14 views
6

Ich habe zwei Bitmaps, Hintergrund und Vordergrund. Wie zeichne ich Bitmap-Vordergrund im Hintergrund, ohne ein anderes Canvas zu verwenden?Zeichnen Bitmaps von Ressourcen über eine andere

Lösung:

1) Zuerst erstellen Bitmaps aus Ressourcen mit zusätzlicher Option ARGB_8888

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 

2) Erklären Sie Bitmaps

Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.background, options); 
Bitmap foreground = BitmapFactory.decodeResource(getResources(), R.drawable.foreground, options); 

3) Innerhalb OnDraw() Funktion draw Grafiken

protected void onDraw(Canvas canvas)  
{ 
    canvas.drawColor(Color.White); 

    Paint paint = new Paint(); 
    canvas.drawBitmap(background, 0, 0, paint); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); 
    canvas.drawBitmap(foreground, 0, 0, paint); 
} 

Und wie Soxxeh sagte, ist dies sehr gute Informationsquelle: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html

+1

Also funktioniert diese Lösung, oder haben Sie eine Frage gestellt? –

Antwort

5
diese

Versuchen:

canvas.drawBitmap(backgroundImageBitmap, 0.0f, 0.0f, null); 
canvas.drawBitmap(foregroundImageBitmap, 0.0f, 0.0f, null); 

Das zweite Bild (Vordergrundbild) hat Alpha Aspekte haben, oder Sie können durch sie nicht sehen .

+0

Wie in Android diese Alpha-Aspekte der Vordergrundbitmap einstellen? – Kris

+1

Wenn Sie die Bitmap erstellen, geben Sie ihr einen RGBA_8888-Parameter, und zeichnen Sie sie dann wie gewohnt (legen Sie keine Hintergrundfarbe fest). Siehe [Bitmap.Config] (http://developer.android.com/reference/android/graphics/Bitmap.Config.html). [Dieses Beispiel] (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html) kann Ihnen auch einige Ideen geben. – Eric

+0

Danke! Endlich funktioniert es! – Kris

1

Wenn Sie ein ImageView verwenden, können Sie die erste Bitmap als Hintergrund und die zweite als Bildquelle festlegen.

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/background" 
    android:src="@drawable/foreground"/> 
+0

Was passiert, wenn kein ImageView verwendet wird? –

+0

- In FrameLayout können Sie einen Vordergrund über setForeground() angeben. - Sie können auch LayerDrawable verwenden, um mehrere Zeichnungsobjekte übereinander zu legen. - Sonst nur mit Erics Ansatz gehen. – jakk

Verwandte Themen