2015-03-07 18 views
7

Tôi tự hỏi nếu có một cách để vẽ các khu vực đầy (giống như hình đa giác đã điền) bằng Canvas Android mà không cần sử dụng lớp Path và gọi canvas.drawPath(...).Có cách nào để vẽ một vùng được tô đầy bằng Canvas mà không sử dụng Đường dẫn không?

Lý do tôi muốn làm điều này mà không cần Path là vì tôi phải vẽ các bộ dữ liệu rất lớn và canvas.drawPath(...) không phải là phần cứng được tăng tốc và do đó làm chậm.

Hiệu suất khi sử dụng canvas.drawLines(...) tốt hơn nhiều vì tăng tốc phần cứng, tuy nhiên tôi chưa tìm thấy cách vẽ đa giác được điền bằng phương pháp này (ngay cả khi tất cả các dòng được kết nối).

Ngay cả gọi paint.setStyle(Style.FILL) không điền vào đa giác khi sử dụng drawLines(...).

Có cách nào để vẽ hình đa giác không sử dụng phương pháp Path không?

Hoặc có cách nào khác để cải thiện hiệu suất bằng cách sử dụng Canvas không?

+0

Tương tác 'view' của bạn (bạn có thay đổi đối với tập dữ liệu của mình khi đang cần phải hiển thị) không? Chỉ cần vẽ tập dữ liệu của bạn vào 'canvas' một lần là chậm? –

+0

Chế độ xem của tôi tương tác và do đó liên tục được làm mới, tôi đã sử dụng cơ chế đệm, giúp cải thiện hiệu suất. Tuy nhiên, tôi vẫn chưa hài lòng. –

+0

Câu hỏi cuối cùng của tôi để xây dựng câu trả lời. Khi thay đổi xảy ra với tập dữ liệu của bạn, bạn có đang vẽ toàn bộ tập dữ liệu một lần nữa hay chỉ những dữ liệu bị ảnh hưởng trong lĩnh vực thay đổi? Ý tôi là, bạn đã sử dụng 'view.invalidate (Rect dirty)' chưa? Đây chỉ là một mẹo để cải thiện hiệu suất. –

Trả lời

0

Bạn có thể muốn xem chế độ xem opengl và sử dụng nó cho tất cả các bản vẽ bạn cần. Chắc chắn sẽ nhanh chóng chết tiệt. Tuy nhiên, tất cả các mã vẽ của bạn cần phải được viết lại.

+3

Không thực sự trả lời câu hỏi, đó là yêu cầu cụ thể cho một giải pháp bằng cách sử dụng 'Canvas'. –

+1

Có, tôi biết rằng OpenGL ES nhanh hơn. Tuy nhiên, nó không phải là một lựa chọn cho tôi. –

0

Bạn có thể cần phải làm điều gì đó như:

Paint red = new Paint(); 

red.setColor(android.graphics.Color.RED); 
red.setStyle(Paint.Style.FILL); 

Và sử dụng màu này cho con đường của bạn, thay vì ARGB của bạn. Hãy chắc chắn rằng điểm cuối cùng của con đường của bạn kết thúc vào đầu tiên, nó cũng có ý nghĩa.

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