Я создаю простое приложение для 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)
Какие еще варианты у меня есть, которые дают результат, аналогичный первому изображению, без проблемы с подпрыгиванием?