Тут сложно сказать, потому что автор рисует круг градиентом всего из нескольких точек, а потом собирается вычислять цвет по углам. Так или иначе, степеней свободы у цвета 4, а кругов — 3.
у вас небольшая проблема тут есть:
не нужно вызвать invalidate() внутри onDraw.
invalidate это и есть просьба вьюшки заново вызвать onDraw — перерисоваться. и так у вас onDraw может вызываться бесконечно, потому что при каждой отрисовке в конце мы просим все перерисовать опять
На вкус и цвет или Раскраска для Андроид