2013-01-07 18 views
11

Aşağıdaki sorun için benim için bir ipucu var mı?Delikli bir çizim yolu (android)

İçinde delik bulunan dolu bir yol (kanvas) çizmek istiyorum. SVG yol tanımda takip geçerli:

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 

Ben

java ile yaptığım deneyin bana tam çizer

(çünkü özel yazılım tasarımı) yolu çıkarma yoluna olmadan bu yolu (şekil) çekmek istiyorum deliksiz kare. Bir SVG izleyicisinin mentollenmiş tanımlama ile deliği neden çizdiğini ve java kanvasının neden yapılmadığını merak ediyorum. fark nerede? Bunu nasıl başarabilirim ?

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

Herhangi bir ipucu? Sen Path.setFillType(Path.FillType.EVEN_ODD) kullanmalıdır

Saygılarımızla

+0

Yukarıdaki kodda, iç kareniz için sadece "moveTo" yapıyorsunuz. – iagreen

+0

Evet, iagreen haklı. Yolun ortasındaki p.close() öğesini dışarı çıkarın. –

cevap

28

:

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

Mükemmel, Çok teşekkür ederim! İyi zaman geçirin ... –

+0

Bunu başarmak için daha önce PorterDuff.Mode.CLEAR kullandım, ancak delikli görünümün altında bir doku görünümü düzenlendiyse, bu da doku görünümünün içine bir delik açıyor. Bu da bu durumda iyi çalışıyor. Teşekkür ederim! – Zarokka

0

SVG fill-rule kullanarak bir yolun dışında/içinde ne belirler. Java ayrıca bir sarma kuralı ayarlanmasına izin verir. Android yollarında da benzer şekilde çalışan bir fillType vardır. Belki de java veya SVG kodu için farklı kurallarınız var mı?