2013-03-11 10 views
6

Sto creando un drawable personalizzato (si estende da Drawable) e sto provando a mettere un effetto ombra su di esso.Il livello di ombreggiatura funziona con l'emulatore ma non su un dispositivo reale

Ecco una parte del mio codice:

public void draw(Canvas canvas) { 
    Path path = new Path(); 
    path.moveTo(0, 0); 
    path.lineTo(0, Y/2); 
    path.lineTo(X/2, Y); 
    path.lineTo(X, Y/2); 
    path.lineTo(X, 0); 
    path.lineTo(0, 0); 
    Paint paint = new Paint(); 
    paint.setColor(context.getResources().getColor(R.color.red_dark)); 
    paint.setStyle(Style.FILL_AND_STROKE); 
    paint.setStrokeWidth(2f); 
    paint.setShadowLayer(1, 0, 10f, context.getResources().getColor(R.color.black)); 
    canvas.drawPath(path, paint); 
} 

Non so perché ma messo un ombra con lo stesso colore, Ho ricontrollato tutto e non vedo dove sia il problema. Lo test su un nesso galattico. Ma sull'emulatore funziona bene.

+0

Questo funziona bene sul mio Samsung Note, ma sto estendendo una vista non disegnabile. Hai provato questo su più dispositivi? – Lumis

risposta

10

Non sono sicuro, ma questo forse a causa dell'accelerazione hardware. setShadowLayer non funziona se la vista è accelerata. Prova a disabilitare l'accelerazione per l'intera app e controlla. Read this.

non supportato da disegno Operations

setShadowLayer(): funziona con solo testo

Utilizzare un tipo di livello software per forzare una vista da rendere nel software. Se una vista accelerata dall'hardware (ad esempio, se l'intera applicazione è acclusa dall'hardware), sta avendo problemi di rendering, questo è un modo semplice per aggirare le limitazioni della pipeline di rendering dell'hardware.

Utilizzare setLayerType per impostare il tipo di livello su singole viste o turn off acceleration in your manifest per l'intera app.

+4

È infatti a causa dell'accelerazione hardware. Le ombre esterne sono attualmente supportate solo sul testo. Se hai bisogno di ombre su altre forme, dovresti usare un livello software sulla tua vista. –

+0

Ho, e come posso farlo? Perché io non sono uno sviluppatore grafico. – Tsunaze

+0

risposta aggiornata. – Leonidos

Problemi correlati