Вы также можете использовать массив цветов и переменных позиций.Например, определите 10 цветов, по одному на каждые 10% прогресса:
<color name="color_0">#3C3C3F41</color>
<color name="color_10">#1AFF2323</color>
<color name="color_20">#33FF2323</color>
<color name="color_30">#4DFF2323</color>
<color name="color_40">#66FF2323</color>
<color name="color_50">#80FF2323</color>
<color name="color_60">#99FF2323</color>
<color name="color_70">#B3FF2323</color>
<color name="color_80">#CCFF2323</color>
<color name="color_90">#E6FF2323</color>
<color name="color_100">#FFFF2323</color>
Поместите все эти цвета в intArray цвета, например:
var colors = intArrayOf(
ContextCompat.getColor(context, R.color.color_0),
ContextCompat.getColor(context, R.color.color_10),
ContextCompat.getColor(context, R.color.color_20),
ContextCompat.getColor(context, R.color.color_30),
ContextCompat.getColor(context, R.color.color_40),
ContextCompat.getColor(context, R.color.color_50),
ContextCompat.getColor(context, R.color.color_60),
ContextCompat.getColor(context, R.color.color_70),
ContextCompat.getColor(context, R.color.color_80),
ContextCompat.getColor(context, R.color.color_90),
ContextCompat.getColor(context, R.color.color_100)
)
Затем определите позиции.Позиции перемещаются от 0,0 до 1,0 (позиции 0,1 соответствуют color_10, позиции 0,2 - color_20 и т.
Наконец, мы можем нарисовать нашу дугу с помощью нашей шейдерной краски:
canvas.drawArc(rectf, -90, 360, false, lightRed);
Окончательный эффект в моем пользовательском представлении: