2012-06-09 12 views
6

Ho due bitmap, background e in primo piano. Come faccio a disegnare in primo piano bitmap sullo sfondo senza utilizzare un'altra tela?Disegnare bitmap dalle risorse rispetto ad un'altra

Soluzione:

1) In primo luogo creare bitmap da risorse con l'opzione aggiuntiva ARGB_8888

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

2) Dichiarare bitmap

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

3) All'interno OnDraw() Grafica funzione draw

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); 
} 
.210

Come ha detto Soxxeh, questa è molto buona fonte di informazioni: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html

+1

Quindi questa soluzione funziona o stavi facendo una domanda? –

risposta

5

Prova questo:

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

Il secondo immagine (un'immagine in primo piano) deve avere aspetti Alpha o non si può vedere attraverso di essa .

+0

Come impostare in Android questi aspetti alfa della bitmap in primo piano? – Kris

+1

Quando create la bitmap, assegnatela a un parametro RGBA_8888, quindi disegnatela normalmente (non impostate un colore di sfondo). Vedi [Bitmap.Config] (http://developer.android.com/reference/android/graphics/Bitmap.Config.html). [Questo esempio] (http://developer.android.com/resamples/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html) potrebbe anche darti qualche idea. – Eric

+0

Grazie! Finalmente funziona! – Kris

1

Se si utilizza un ImageView è possibile impostare la prima bitmap come sfondo e la seconda come fonte di immagine.

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

Cosa succede se non si utilizza ImageView? –

+0

- Su FrameLayout è possibile specificare un foreground tramite setForeground(). - Puoi anche usare LayerDrawable per mettere più drawable uno sopra l'altro. - Else va semplicemente con l'approccio di Eric. – jakk

Problemi correlati