2012-06-09 17 views
6

Tengo dos mapas de bits, fondo y primer plano. ¿Cómo dibujo plano de mapa de bits en segundo plano sin utilizar otro lienzo?Dibujar mapas de bits de recursos sobre otro

Solución:

1) En primer lugar crear mapas de bits de recursos con la opción adicional ARGB_8888

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

2) Declarar mapas de bits

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

3) Dentro de onDraw() gráficos dibujar función

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

Y como dijo Soxxeh, esto es muy buena fuente de información: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html

+1

Entonces, ¿esta solución funciona, o usted estaba haciendo una pregunta? –

Respuesta

5

Prueba esto:

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

La segunda imagen (imagen en primer plano) tiene que tener aspectos alfa o no puede ver a través de él .

+0

¿Cómo establecer en Android estos aspectos alfa del mapa de bits en primer plano? – Kris

+1

Al crear el mapa de bits, proporciónele un parámetro RGBA_8888, luego dibuje como normal (no establezca un color de fondo). Ver [Bitmap.Config] (http://developer.android.com/reference/android/graphics/Bitmap.Config.html). [Este ejemplo] (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html) también puede brindarle algunas ideas. – Eric

+0

¡Gracias! ¡Finalmente funciona! – Kris

1

Si utiliza un ImageView puede establecer el primer mapa de bits como fondo y el segundo como fuente de imagen.

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

¿Qué pasa si no se utiliza un ImageView? –

+0

- En FrameLayout puedes especificar un primer plano a través de setForeground(). - También puede usar LayerDrawable para colocar varios objetos aptos uno encima del otro. - Deje de lado el enfoque de Eric. – jakk

Cuestiones relacionadas