2012-05-02 14 views
5

Sto cercando di ottenere gli stessi risultati di thread: Make certain area of bitmap transparent on touch. Sono fedele al codice presentato in questa risposta: Lumis answer e secondo SteD questa soluzione dovrebbe funzionare.Rendi trasparente una determinata area di bitmap -> di nuovo

Sfortunatamente non funziona per me (e anche per un altro utente: Make certain area of bitmap transparent on touch doesn't works, it's draw a black circle), sto ottenendo solo il cerchio nero. Ho provato molte cose ma non ho risolto questo problema. Rendi trasparente lo sfondo come suggerito dal secondo thread non fare alcuna differenza.

Dopo molti esperimenti ho trovato che la trasparenza è in funzione, quando sto impostato questo

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

nel mio AndroidManifest.xml riesco a vedere tutto sotto la mia domanda vale a dire desktop. Ho passato il codice molte volte e non vedo errori evidenti, solo la ragione per cui penso è che questo è l'ordine Z, ma bitmap e canvas non eseguono ordini di manutenzione. L'ordinamento Z viene eseguito disegnando in un certo ordine (che è corretto in questo codice).

Si tratta di qualche strano esempio di ottimizzazione nel codice Android o mi manca qualcosa nel file manifest di Android?

risposta

6

finalmente ho trovato la soluzione che sta lavorando:

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

Ma io non capisco il motivo per cui sta lavorando. Ero indagare xfermodes con questo codice sorgente: android Xfermodes demo e secondo questa immagine: Xfermodes image

Non ha alcun senso, a parte che xfermode assicurarsi che bitmap overlay è di fagioli disegnato secondo (ordine Z) e la trasparenza è venuto a giocare. Ma l'ordine Z dovrebbe essere mantenuto per ordine di disegno.

Se qualcuno ha un'idea migliore su come risolvere questo problema, si prega di condividere le proprie conoscenze.

Saluti.

+0

Paint new_paint = new Paint (/ * Paint.ANTI_ALIAS_FLAG * /); new_paint.setXfermode (nuovo PorterDuffXfermode (Mode.SRC_ATOP)); canvas.drawBitmap (overlay, 0, 0, new_paint); ================================================= = era la cosa principale, che ha risolto grazie – ViVekH

2

è possibile modificare il metodo 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); 
    } 

ho provato e ha funzionato! Spero che questa soluzione ti aiuti

+0

grazie amico .. questo mi ha aiutato .. –

Problemi correlati