2013-01-07 18 views
11

Qualcuno ha un suggerimento per me per il seguente problema?percorso tracciato con foro (android)

Mi piacerebbe disegnare un percorso pieno (tela) che ha un buco in esso. In SVG la definizione del percorso è il seguente:

M 100 100 L 200 100 L 200 200 L 100 200 L 100 100 z 
M 125 125 L 175 125 L 175 175 L 125 175 L 125 125 z 

Vorrei disegnare questo percorso (forma), senza percorso percorso sottrarre (a causa della progettazione del software specifico)

La mia prova con Java ME pareggi un pieno piazza senza buco. Mi chiedo, perché un visualizzatore SVG disegna il buco con la definizione risoluta e la tela java no? dov'è la differenza? Come posso raggiungere questo obiettivo ?

  Path p=new Path(); 
     p.moveTo(100, 100); 
     p.lineTo(200,100); 
     p.lineTo(200,200); 
     p.lineTo(100,200); 
     p.close(); 
     p.moveTo(150, 150); 
     p.moveTo(180, 150); 
     p.moveTo(180, 180); 
     p.moveTo(150, 180); 
     p.close(); 
     canvas.drawPath(p, paint); 

Qualche suggerimento?

riguarda

+0

Nel codice sopra, stai facendo solo "moveTo" per il tuo quadrato interno. – iagreen

+0

Sì, iagreen ha ragione. Estrarre il p.close() nel mezzo del percorso. –

risposta

28

si dovrebbe usare Path.setFillType(Path.FillType.EVEN_ODD):

final Path path = new Path(); 
final Paint paint = new Paint(); 

paint.setColor(Color.RED); 
paint.setAntiAlias(true); 
paint.setStyle(Paint.Style.FILL_AND_STROKE); 

path.moveTo(100, 100); 
path.lineTo(200, 100); 
path.lineTo(200, 200); 
path.lineTo(100, 200); 
path.close(); 

path.moveTo(150, 150); 
path.lineTo(180, 150); 
path.lineTo(180, 180); 
path.lineTo(150, 180); 
path.close(); 

path.setFillType(Path.FillType.EVEN_ODD); 
canvas.drawPath(path, paint); 
+0

Perfetto, grazie mille! Buon divertimento ... –

+0

Ho usato PorterDuff.Mode.CLEAR prima di raggiungere questo obiettivo, ma se una vista texture è strutturata sotto la vista con il foro, anche questo taglia un buco nella vista texture stessa. Anche in questo caso funziona bene. Grazie! – Zarokka

0

SVG determina ciò che è dentro/fuori di un percorso utilizzando il fill-rule. Java consente anche di impostare una regola di avvolgimento. Con i percorsi Android c'è anche un fillType che funziona in modo simile. Forse hai impostato regole diverse per il codice java o SVG?

Problemi correlati