2013-01-07 37 views
11

Có ai có gợi ý cho tôi về sự cố sau không?vẽ đường dẫn có lỗ (android)

Tôi muốn vẽ đường dẫn đầy (canvas) có lỗ hổng trong đó. Trong SVG định nghĩa đường là sau:

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 

Tôi muốn vẽ con đường này (hình) mà không cần con đường con đường trừ (vì thiết kế phần mềm cụ thể)

thử của tôi với java thu hút tôi một đầy đủ hình vuông không có lỗ. Tôi tự hỏi, tại sao một người xem SVG vẽ lỗ với định nghĩa mentoined và vải java không? sự khác biệt ở đâu? Làm thế nào tôi có thể đạt được điều này ?

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

Bất kỳ gợi ý nào?

liên quan

+0

Trong mã ở trên, bạn chỉ đang thực hiện "moveTo" cho hình vuông bên trong của mình. – iagreen

+0

Có, iagreen là đúng. Đưa ra các p.close() ở giữa đường dẫn. –

Trả lời

28

Bạn nên sử dụng 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

Hoàn hảo, Cảm ơn bạn rất nhiều! Có một thời gian tốt ... –

+0

Tôi đã sử dụng PorterDuff.Mode.CLEAR trước để đạt được điều này, nhưng nếu một khung nhìn kết cấu được bố trí bên dưới khung nhìn với lỗ, điều đó cũng cắt một lỗ vào khung nhìn kết cấu. Điều này cũng tốt trong trường hợp này. Cảm ơn bạn! – Zarokka

0

SVG xác định những gì bên trong/bên ngoài một con đường bằng công fill-rule. Java cũng cho phép thiết lập quy tắc quanh co. Với đường dẫn Android, cũng có fillType hoạt động tương tự. Có lẽ bạn có các quy tắc khác nhau được đặt cho mã java hoặc SVG?

Các vấn đề liên quan