Lớp HexagonDrawable đó vẽ hai hình lục giác khác nhau, xếp chồng lên nhau. Tôi không biết nếu bạn cần nó để được như vậy, nhưng tôi nghĩ rằng cách tốt nhất để đạt được kết quả tương tự là sử dụng một Paint với Stroke phong cách.
Để làm như vậy, bạn cần phải loại bỏ các con đường hình lục giác thứ hai và giảm kích thước của hình lục giác (vì vậy quan điểm sẽ không cắt nó):
public void computeHex(Rect bounds) {
final int width = bounds.width();
final int height = bounds.height();
// We need to decrease the hexagon's size, so the view won't cut our stroke
final int size = Math.min(width - (strokeWidth/2), height - (strokeWidth/2));
final int centerX = bounds.left + (width/2);
final int centerY = bounds.top + (height/2);
hexagon.reset();
hexagon.addPath(createHexagon(size, centerX, centerY));
// Remove the second path
// hexagon.addPath(createHexagon((int) (size * .8f), centerX, centerY));
}
Và thêm hiệu ứng Stroke để sơn:
private int strokeWidth;
public HexagonDrawable(int color, int strokeWidth) {
this.strokeWidth = strokeWidth;
paint.setColor(color);
// Add Stroke style and width
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(strokeWidth);
// You can add these other attributes if you need to
// paint.setDither(true);
// paint.setStrokeJoin(Paint.Join.ROUND);
// paint.setStrokeCap(Paint.Cap.ROUND);
// Remove the fill type, you won't need anymore
// hexagon.setFillType(Path.FillType.EVEN_ODD);
// Finally add the Path Effect
paint.setPathEffect(new CornerPathEffect(30.0f));
}
Điều đó sẽ tạo ra hiệu ứng rất giống với những gì bạn đang tìm kiếm.
Hy vọng điều đó sẽ hữu ích! ;)
Chỉnh sửa: Tôi quên cảnh báo bạn rằng chiều rộng Đột quỵ không được lớn hơn bán kính của CornerPathEffect, nếu không nó sẽ bị cắt.
Nguồn
2015-05-19 19:22:41
Thực tế, câu trả lời của bạn thực sự là hoàn hảo và đạt được chính xác những gì tôi muốn sử dụng trong trường hợp này. Bạn cũng thêm các chi tiết bổ sung mà tôi đã bỏ lỡ (cách vẽ được vẽ tương ứng với đường dẫn, các ràng buộc của chiều rộng nét đến bán kính, v.v.). Tuy nhiên, tôi đã đặt câu hỏi theo một cách cụ thể, rất cụ thể bởi vì tôi thực sự muốn _learn_ và hiểu hành vi của EVEN_ODD và các dòng đóng, đó là lý do tại sao tôi đã thử nghiệm với lớp đó để bắt đầu). Nhưng, tất nhiên, sự giúp đỡ của bạn được đánh giá cao! – davidcesarino