Quella classe HexagonDrawable disegna due esagoni diversi, impilati uno sopra l'altro. Non so se è necessario che sia così, ma penso che il modo migliore per ottenere lo stesso risultato sia usare uno stile Paint with Stroke.
Per fare ciò, è necessario rimuovere il secondo percorso esagono e diminuire le dimensioni della esagonale (quindi la vista non è tagliato):
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));
}
E aggiungere l'effetto del colpo alla vernice:
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));
}
Questo dovrebbe creare un effetto molto simile a quello che stavi cercando.
Spero che aiuti! ;)
Modifica: ho dimenticato di avvertire che la larghezza del tratto non può essere maggiore del raggio di CornerPathEffect, altrimenti verrà comunque tagliata.
fonte
2015-05-19 19:22:41
Pragmaticamente, la tua risposta è davvero perfetta e raggiunge esattamente quello che userei in questo caso. Inoltre, aggiungo ulteriori dettagli che mi sono sfuggiti (come viene tracciato il tratto rispetto al percorso, i vincoli della larghezza del tratto al raggio ecc.). Tuttavia, ho formulato la domanda in un certo modo molto specifico perché voglio davvero imparare e capire il comportamento di EVEN_ODD e delle linee chiuse, ed è per questo che stavo sperimentando con quella classe per cominciare). Ma, naturalmente, il tuo aiuto è molto apprezzato! – davidcesarino