2016-11-03 3 views
2

Wie kann ich Path mit Fading (Deckkraft oder Dicke) Linie zeichnen? Etwas wie das.Wie tro zeichnen Fading-Pfad

Fading example

Ich weiß, es ist LinearGradient Shader für Paint, aber es wird nicht bend entlang der Path.

Eine mögliche Lösung könnte sein, Punkte entlang der Path zu bekommen und es einfach selbst durch die Segmente zu zeichnen ". Aber dafür konnte ich auch keine Methode finden.

Antwort

1

Ich kam mit dem folgenden Code. Die wichtigste Sache ist PathMeasure's getPosTan() method.

if (getGesturePath() != null) { 
    final short steps = 150; 
    final byte stepDistance = 5; 
    final byte maxTrailRadius = 15; 
    pathMeasure.setPath(getGesturePath(), false); 
    final float pathLength = pathMeasure.getLength(); 
    for (short i = 1; i <= steps; i++) { 
     final float distance = pathLength - i * stepDistance; 
     if (distance >= 0) { 
      final float trailRadius = maxTrailRadius * (1 - (float) i/steps); 
      pathMeasure.getPosTan(distance, pathPos, null); 
      final float x = pathPos[0] + RandomUtils.nextFloat(0, 2 * trailRadius) - trailRadius; 
      final float y = pathPos[1] + RandomUtils.nextFloat(0, 2 * trailRadius) - trailRadius; 
      paint.setShader(new RadialGradient(
        x, 
        y, 
        trailRadius > 0 ? trailRadius : Float.MIN_VALUE, 
        ColorUtils.setAlphaComponent(Color.GREEN, random.nextInt(0xff)), 
        Color.TRANSPARENT, 
        Shader.TileMode.CLAMP 
      )); 
      canvas.drawCircle(x, y, trailRadius, paint); 
     } 
    } 
}