2012-05-13 41 views
6

Tôi cần phải tạo một mặt nạ cắt với hình dạng của một khu vực hình tròn.Mặt cắt hình tròn có hình tròn với Path.addArc?

tôi có thể rút ra một cách sử dụng như sau:

paint.setColor(0x88FF0000); 
paint.setStyle(Style.FILL); 
canvas.drawArc(oval, 0, 30, true, paint); 

Tôi muốn sử dụng nó như là một con đường cắt, vì vậy tôi đã cố gắng:

Path path = new Path(); 
path.addArc(oval, 0, 30); 
canvas.clipPath(path, Op.REPLACE); 

Tuy nhiên addArc không có tham số useCenter vì vậy những gì tôi nhận được không phải là một sector mà là một phân đoạn.

Trả lời

12

Ok, có vẻ như không có cách nào thực hiện việc này bằng cách sử dụng mặt nạ cắt.

Tuy nhiên, có một cách thay thế bằng cách sử dụng PorterDuffXfermode. Xem Xfermodes trong ApiDemos.

Tôi chỉ vẽ một khu vực bằng cách sử dụng drawArc trên hình ảnh của mình bằng toán tử DST_OUT. Điều này làm cho một phần của hình ảnh được bao phủ bởi khu vực vô hình (không được vẽ).

paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
paint.setColor(0xFFFFFFFF); 
paint.setStyle(Style.FILL); 
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); 

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
drawable.draw(canvas); 
canvas.drawArc(oval, 30, 90, true, paint); 
2

Tôi cần tinh chỉnh thư viện AChartEngine cho Android để biến biểu đồ hình tròn thành biểu đồ hình tròn. Tôi cần thay thế những điều sau:

canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint); 

bằng cách sử dụng lớp Đường dẫn để có thể sử dụng cắt. Mã sau đã thực hiện công việc cho tôi:

Path path = new Path(); 
path.moveTo(oval.centerX(), oval.centerY()); 
path.addArc(oval, startAngle, sweepAngle); 
path.lineTo(oval.centerX(), oval.centerY()); 
canvas.drawPath(path, paint); 

Tôi hy vọng điều này sẽ tiết kiệm một số cơn đau đầu cho những người không quen với Canvas API như chính tôi.

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