我正在创建一个简单的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)
我还有哪些其他选项可以提供与第一张图片相似的结果,而不会出现弹跳问题?
答案 0 :(得分:0)
如果有人像我一样对解决这个问题感到震惊,我会提供一个解决方案。谢谢亚历克斯照亮道路。我拿了你贴的东西,把路径当作一系列直线,并用自己的 LinearGradient 绘制每条线,根据其长度和位置在总长度中计算。这是有效的,因为 LinearGradient 是线性的,因此它适用于直线。