Прозрачность не должна быть медленной, пока вы держите ее на минимуме и держитесь подальше от очень старых телефонов. Следует также отметить, что альфа иногда игнорируется в некоторых реализациях, а иногда квантуется до уродливых уровней (некоторые телефоны Motorola привязывают альфа-значения к ближайшему 2-битному значению. Bleh).
Мне бы хотелось подойти к этому как к одному прозрачному слою, наложенному на экран. Сохраняйте массив int размером вашего экрана, в который вы будете отображать прозрачные пиксели (int [width * height]). В каждом кадре вызывайте Image.createRGBImage и выводите это изображение на экран.
В качестве эксперимента вы можете сначала убедиться, что альфа-обработка не замедлит вас, заполнив этот массив постоянным значением и отобразив его на экране. Например. 0x80FF0000 должен смешивать красный оттенок на экране, и вы можете легко увидеть, будет ли этот альфа-бизнес работать на выбранном вами телефоне, то есть вы можете измерить, как это повлияет на частоту кадров.
Далее вам нужно построить круги в этом массиве. Найдите алгоритм рисования окружностей Брезенхама и переделайте его, чтобы построить в массив пикселей int. Возможно, вы захотите сохранить справочную таблицу с предварительно рассчитанным радиусом / sqrt (2) для каждого радиуса, который вы хотите построить.
Далее следует, как смешивать цвета, чтобы они перекрывались. Простейшим будет просто отобразить значение цвета с альфа-каналом в пикселе. Вы не получите смешения цветов с уже нанесенными кругами, но это будет дешево, и круги будут смешиваться с фоном.
Другим способом было бы игнорировать смешение цветов, но сделать простое слияние по альфе. Э.Г.
newColour = ((destColour & 0xFF000000) + 0x20000000) | srcColour;
/* Where source colour is of the form 0x00RRGGBB. Note: Adding 0x20 to alpha each
* time will only work for 7 overlapping circles. */
Цвет перекрывающегося круга будет доминировать над основным, но альфа станет более непрозрачным, когда они перекрываются, что по крайней мере позволит игроку правильно видеть все круги.
Если вы хотите сделать точное смешивание цветов, тогда расчеты будут намного сложнее, особенно если вы смешиваете одно значение с альфа-каналом на другом с альфа-каналом, поскольку цветовые вклады каждого пикселя варьируются в зависимости от пропорции альфа в каждом цвет. Это не невозможно, но сделать это эффективно - это боль. Я бы соблазнился пойти на более дешевый вариант.