Diese HexagonDrawable-Klasse zeichnet zwei verschiedene Sechsecke, die übereinander gestapelt sind. Ich weiß nicht, ob Sie es brauchen, aber ich denke, der beste Weg, um das gleiche Ergebnis zu erzielen, ist die Verwendung eines Paint-with-Stroke-Stils.
so zu tun, müssen Sie den zweiten Sechseck Pfad entfernen und die Sechseck Größe verringern (so die Ansicht wird nicht schneiden):
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));
}
Und den Schlaganfall-Effekt auf die Farbe hinzufügen:
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));
}
Das sollte einen sehr ähnlichen Effekt zu dem, was Sie suchen, erstellen.
Hoffe es hilft! ;)
Edit: Ich habe vergessen dich zu warnen, dass die Stroke Breite nicht größer sein kann als CornerPathEffects Radius, sonst wird es trotzdem abgeschnitten.
Pragmatisch ist Ihre Antwort in der Tat perfekt und erreicht genau das, was ich in diesem Fall verwenden würde. Sie fügen auch zusätzliche Details hinzu, die ich übersehen habe (wie der Strich relativ zum Pfad gezeichnet wird, Einschränkungen der Strichbreite zum Radius usw.). Allerdings habe ich die Frage auf eine bestimmte, sehr spezifische Weise formuliert, weil ich wirklich das Verhalten von EVEN_ODD und geschlossenen Zeilen lernen und verstehen möchte, weshalb ich zu Beginn mit dieser Klasse experimentierte. Aber natürlich wird Ihre Hilfe sehr geschätzt! – davidcesarino