Как нарисовать путь, где хвост становится прозрачным - PullRequest
1 голос
/ 06 мая 2019

Я создаю простое приложение для 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)

Какие еще варианты у меня есть, которые дают результат, аналогичный первому изображению, без проблемы с подпрыгиванием?

...