如何绘制一条路径,使尾巴逐渐变成透明

时间:2019-05-06 13:13:06

标签: android kotlin android-canvas android-paint

我正在创建一个简单的Android应用,其中的微粒在屏幕上移动。

当前,这些粒子是使用应用了LinearGradient着色器的绘画绘制的。这样可以使粒子沿着路径很好地淡化为透明,如下图。

https://i.imgur.com/2n0aMPG.jpg

着色器如下

trailPaint.shader = LinearGradient(
                trail[size - 1].x,
                trail[size - 1].y,
                trail[0].x,
                trail[0].y,
                trailPaint.color,
                Color.TRANSPARENT,
                Shader.TileMode.MIRROR
            )

canvas.drawPath(trailPath, trailPaint)

这里的问题是,着色器的边界基于路径中前后大多数点的位置,因此,当粒子重新转向自身时,着色器将不再覆盖路径的中间。发生这种情况的示例可以在此处查看:https://i.imgur.com/obEShJ6.mp4

我还尝试用越来越透明的圆圈画出路径上的每个点,但是它们并没有给出同样令人讨厌的连续路径

https://i.imgur.com/zNOMR11.jpg

trailPaint.shader = LinearGradient(
                        point.x,
                        point.y,
                        trail[index + 1].x,
                        trail[index + 1].y,
                        ColorUtils.blendARGB(colour, Color.TRANSPARENT, (1 - (index.toFloat() / size))),
                        ColorUtils.blendARGB(colour, Color.TRANSPARENT, (1 - ((index.toFloat() + 1) / size))),
                        Shader.TileMode.CLAMP
                    )

                    canvas.drawCircle(point.x, point.y, trailPaint.strokeWidth / 2, trailPaint)

我还有哪些其他选项可以提供与第一张图片相似的结果,而不会出现弹跳问题?

1 个答案:

答案 0 :(得分:0)

如果有人像我一样对解决这个问题感到震惊,我会提供一个解决方案。谢谢亚历克斯照亮道路。我拿了你贴的东西,把路径当作一系列直线,并用自己的 LinearGradient 绘制每条线,根据其长度和位置在总长度中计算。这是有效的,因为 LinearGradient 是线性的,因此它适用于直线。