Dưới đây là làm thế nào để tạo ra một khu vực cắt hình dạng của một vòng tròn:Trên Android, làm cách nào để tạo các vùng cắt hình kỳ lạ?
Path path = new Path();
path.addCircle(200,200,100,Direction.CW);
c.clipPath(path); // c is a Canvas
Bây giờ có một khu vực cắt trên Canvas, giúp ngăn chặn vẽ bất cứ điều gì ngoài giới hạn của vòng tròn đó. Nhưng, nếu tôi muốn có khu vực cắt có hình dạng như một chiếc bánh rán (hoặc bất kỳ thứ gì)?
tôi đã cố gắng chơi xung quanh với việc tạo ra một con đường thứ hai và sử dụng toggleInverseFillType vào nó và sau đó nói thêm rằng với các đường dẫn gốc, nhưng điều đó dường như không làm việc.
Ngoài ra, thay vì sử dụng một con đường, là nó có thể chỉ cần tạo một Bitmap để sử dụng như một chiếc mặt nạ và đặt nó như một clipping mask trên Canvas bằng cách nào đó?
EDIT: Câu trả lời là chính xác những gì tôi cần với một bổ sung nhỏ. Khi thực hiện nhiều thao tác trên canvas, luôn sử dụng Op.REPLACE trên lời gọi clipPath đầu tiên. Điều đó sẽ thay thế bất kỳ clipPath hiện có nào trên Canvas đó.
Để tham khảo, dưới đây là những gì tôi đã khám phá ý nghĩa của 6 giá trị Region.Op khác nhau. Hãy tưởng tượng một sơ đồ venn với 2 vòng tròn. "B" là phần mà 2 vòng tròn trùng nhau. "A" là vòng tròn trái không trùng lặp. "C" là vòng tròn bên phải không trùng lặp.
c.clipPath(a,Region.Op.REPLACE);
c.clipPath(b,???);
Region.Op.DIFFERENCE -> A..
Region.Op.INTERSECT -> .B.
Region.Op.REPLACE -> .BC
Region.Op.REVERSE_DIFFERENCE -> ..C
Region.Op.UNION -> ABC
Region.Op.XOR -> A.C
"." cho biết phần không được vẽ. Xin lỗi nếu điều đó không rõ ràng. Thật khó để mô tả tốt mà không có đồ họa.
clipPath không được hỗ trợ trên Android 4 – Renetik
Clippath được hỗ trợ tốt, nếu bạn tắt tăng tốc phần cứng cho tầm nhìn của bạn/hoạt động /ứng dụng. Sự khác biệt với Android 4+ là HA được bật theo mặc định. – Plato
clipPath bây giờ cũng là HA trong 4.3+ – Ruxton