2010-03-08 8 views
16

Io uso il seguente codice per disegnare una bitmap durante OnDraw di una visualizzazione personalizzataAndroid Paint.setShadowLayer() vs Canvas.drawbitmap() problemi

Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); 
p.setShadowLayer(3,3,3,0xff000000); 
Bitmap bmp = BitmapFactory.decodeResource(some drawable jpg); 
canvas.drawBitmap(bmp,null,new Rect(blah blah),p); 

e l'ombra sembra divertente. Cosa intendo divertente? Intendo dire che ottengo un'ombra diversa, se chiamassi canvas.drawRect(). Sembra che il codice shadow di Android stia trattando la bitmap come un canale alfa o qualcosa del genere.

hanno provato ad aggiungere p.setColor (0xff000000); e p.setStyle (Paint.Style.FILL); ma non differenza.

Immagino di poter disegnareRect con shadow on, quindi drawBitmap con shadow off, ma quello sembra sciocco come renderebbe i pixel due volte.

+4

in questo caso: un'immagine dice più di 1000 parole. Per favore aggiungi uno screenshot – WarrenFaith

risposta

-1

Forse dovresti avere oggetti Paint diversi per scopi diversi come testo, bitmap, ecc. Quindi le impostazioni di una persona non influenzeranno gli altri.

+0

Sto facendo solo un'operazione di disegno e quindi ho un solo oggetto Paint. per favore rileggi la mia domanda e il mio codice. – SteelBytes

2

Fondamentalmente il livello di ombreggiatura non funziona per nulla tranne il testo. È davvero stupido. Controlla lo Android hardware acceleration supported operations chart.

Questa domanda è stata posta nel 2010 quando gli alberi con vista accelerata hardware non esistevano .. in base alle cose che ho letto, anche allora il livello ombra funzionava solo per forme semplici (se non del tutto), e altri avevano stranezze risultati che lo usano su tutto tranne che sul testo. Potresti essere sfortunato.

Infine, ci sono molti modi in cui puoi simulare un livello ombra. Puoi racchiudere una vista in un'altra vista e disegnare al di sotto di essa. Puoi scrivere una vista che disegna l'ombra tu stesso come una sfumatura radiale, ecc. Ma probabilmente vuoi solo fare un 9patch che assomiglia ad un'ombra e usarlo.