Посмотрев исходники - видно, что закраска (включая градиентную из кучи закрашенных кругов) идет ровно по тому же радиусу, что и окантовка радиокнопки =)
В яве закрашенные и незакрашенные фигуры - отличаются на один пиксель, конечно же. Школьная ошибка) И видимо так занят был доработками, что на эти пиксели было все равно (да и чем больше был экран у более новых телефонов с годами, тем меньше эти пиксели было видно). Вот как это работает в яве с прямоугольниками, то же и с кругами:

Можно было бы уменьшить окантовку. А лучше наоборот - закраску сделаем шире на один реальный пиксель по горизонтали и вертикали, чтоб она достала до окантовки и перестала оставлять ряд пустых пикселей. На андроидовском шрифте и на PCF-шрифте получается:

Поближе выглядит так:


Черная точка не центрирована, т.к. размеры рассчитываются исходя из целочисленного деления диаметра круга на 4, и если размер не делится на 4 - то дробная часть отсекается, а это значит что точка уменьшается со сдвигом к левому верхнему углу экрана. Правильно считать ее размер как вписанную в прямоугольник, левый верхний угол которого в точке, отодвинутой от левого верхнего угла радиокнопки на r/4 к центру радиокнопки и правый нижний угол которого - в точке, отходящей от правого нижнего угла радиокнопки на r/4 к центру радиокнопки.
После исправления координат круга для черной точки:

Поближе выглядит так:


Теперь черная точка на обоих размерах (кратных 4 и не кратных 4) - стоит по центру. Можно еще увеличить было бы ее на 1 виртуальный пиксель, т.к. две зазубрины справа и снизу круга говорят о том что вообще-то круг шире. Но тогда она будет не центрирована на мелких разрешениях, так что оставляем ее так.
Проверка на остальных телефонах:
2 - RugGear RG310


3 - Xiaomi Duoqin F22 Pro


4 - Nokia N90


5 - Xiaomi Redmi Turbo 3 (Poco F6)


Теперь точка везде стоит более-менее ровно. И закраска фона закрашивает всю радиокнопку полностью.




























































