2012-05-02 10 views
5

Estoy tratando de obtener los mismos resultados que por hilo: Make certain area of bitmap transparent on touch. Me atengo al código presentado en esta respuesta: Lumis answer y según SteD esta solución debería funcionar.Hacer cierta área de mapa de bits transparente al tacto -> nuevamente

Lamentablemente no funciona para mí (y también para otro usuario: Make certain area of bitmap transparent on touch doesn't works, it's draw a black circle), solo estoy obteniendo un círculo negro. Intenté muchas cosas pero no pude resolver esto. Haga que el fondo transparente según la sugerencia del segundo hilo no haga ninguna diferencia.

Después de muchos experimentos He encontrado que la transparencia está trabajando, cuando me puse esta

android:theme="@android:style/Theme.Translucent" 

en mi AndroidManifest.xml puedo ver todo bajo mi solicitud es decir, escritorio. Pasé por el código muchas veces y no puedo ver el error obvio, solo porque pienso que esto es por orden Z, pero los mapas de bits y el lienzo no hacen pedidos de mantenimiento z. El orden Z se hace dibujando en cierto orden (que es correcto en este código).

¿Es este un extraño ejemplo de optimización en el código de Android, o me falta algo en el archivo de manifiesto de Android?

Respuesta

6

fin encontré la solución que está trabajando:

@Override 
public void onDraw(Canvas canvas){ 
    super.onDraw(canvas); 

    //draw background 
    canvas.drawBitmap(bgr, 0, 150, null); 
    //copy the default overlay into temporary overlay and punch a hole in it       
    c2.drawBitmap(overlayDefault, 0, 0, null); //exclude this line to show all as you draw 
    c2.drawCircle(X, Y, 80, pTouch); 
    //draw the overlay over the background 
    //canvas.drawBitmap(overlay, 0, 0, null); 

    Paint new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/); 
    new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP)); 
    canvas.drawBitmap(overlay, 0, 0, new_paint); 
} 

Pero no entiendo por qué está trabajando. Yo era investigar xfermodes con este código fuente: android Xfermodes demo y de acuerdo con esta imagen: Xfermodes image

No tiene ningún sentido, salvo que xfermode asegurarse de que mapa de bits de superposición es frijol dibujado segundo (orden Z) y la transparencia vine a jugar. Pero el orden Z debe mantenerse por orden de dibujo.

Si alguien tiene una mejor idea de cómo resolver esto, por favor comparta su conocimiento.

Atentamente.

+0

Pintar new_paint = new Paint (/ * Paint.ANTI_ALIAS_FLAG * /); new_paint.setXfermode (nuevo PorterDuffXfermode (Mode.SRC_ATOP)); canvas.drawBitmap (overlay, 0, 0, new_paint); =========================================== = fue lo principal, que lo resolvió gracias – ViVekH

2

puede editar método onDraw():

public void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 
     canvas.drawColor(Color.TRANSPARENT); 
     canvas.drawBitmap(bgr, 0, 0, null); 

     c2.drawCircle(X, Y, 10, pTouch); 
     Paint new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/); 
     new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP)); 
     canvas.drawBitmap(overlay, 0, 0, new_paint); 
    } 

intenté y funcionó! Espero que esta solución lo ayude

+0

gracias amigo ... esto me ayudó ... –

Cuestiones relacionadas