2016-11-03 3 views
2

Path을 페이드 (opacity 또는 thicknes) 행으로 어떻게 그릴 수 있습니까? 이 같은.페이딩 경로를 그릴 방법

Fading example

나는 Paint에 대한 LinearGradient 쉐이더가 알고 있지만 Path 함께 벤드하지 않습니다.

가능한 해결책 중 하나는 Path에 따라 점을 얻고 세그먼트를 통해 직접 그려 보는 것입니다. ' 그러나 나는 그 방법을 찾지 못했습니다.

답변

1

다음 코드를 작성했습니다. 중요한 것은 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); 
     } 
    } 
}