Android 如何绘制尾部渐变为透明的路径

Android 如何绘制尾部渐变为透明的路径,android,kotlin,android-canvas,android-paint,Android,Kotlin,Android Canvas,Android Paint,我正在创建一个简单的Android应用程序,其中有粒子在屏幕上移动 这些粒子当前使用已应用LinearGradient着色器的绘制。这允许粒子沿路径很好地淡入透明状态,如下图所示 着色器如下所示 trailPaint.shader = LinearGradient( trail[size - 1].x, trail[size - 1].y, trail[0].x, t

我正在创建一个简单的Android应用程序,其中有粒子在屏幕上移动

这些粒子当前使用已应用LinearGradient着色器的绘制。这允许粒子沿路径很好地淡入透明状态,如下图所示

着色器如下所示

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)
这里的问题是着色器的边界基于路径中最前面和最后面的点的位置,因此当粒子重新启用自身时,着色器不再覆盖路径的中间。这里可以看到这种情况的一个例子:

我也试着用越来越透明的圆圈画出路径上的每一点,但这些圆圈并没有给出一条同样令人不快的连续路径


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

如果像我这样的人在解决这个问题时遇到困难,我会提供一个解决方案。谢谢亚历克斯为我们引路。我拿了你贴的东西,把这条路当作一系列直线,然后画出每一条,每一条都有自己的直线半径,根据它的长度和在总长度中的位置来计算。这是有效的,因为LinearGradient是线性的,所以它适用于直线。

如果像我这样的人在解决这个问题时遇到困难,我会提供一个解决方案。谢谢亚历克斯为我们引路。我拿了你贴的东西,把这条路当作一系列直线,然后画出每一条,每一条都有自己的直线半径,根据它的长度和在总长度中的位置来计算。这是因为LinearGradient是线性的,所以它适用于直线

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)