Нарисуйте прозрачный круг, заполненный снаружи - PullRequest
5 голосов
/ 18 декабря 2011

У меня есть вид карты, на котором я хочу нарисовать круг, чтобы сфокусироваться на данной области. Но я хочу, чтобы круг перевернулся. То есть, вместо того, чтобы заполнить внутреннюю часть круга, он прозрачен, а все остальное заполнено. Посмотрите на эту картинку, чтобы понять, что я имею в виду (http://i.imgur.com/zxIMZ.png). Верхняя половина показывает, что я могу сделать с нормальным кругом. Внизу показан «перевернутый» круг.

Я пытался искать, но было довольно сложно найти то, что я хочу. Кто-нибудь знает, как я могу сделать что-то подобное?

Ответы [ 3 ]

13 голосов
/ 18 мая 2015

Мой ответ довольно поздний, но может помочь кому-то добиться этого.Вот пример того, как сделать полупрозрачный вид с прозрачным кругом, совпадающим по размеру с наименьшим размером, помещенным в центр с небольшим полемОн может быть размещен как оверлей на любом виде

1 голос
/ 05 августа 2017

Сделайте так, как вы бы нарисовали нормальный круг, но с расположением дополнения и радиусом дополнения.Нравится:

{0-Lat, (Long-180)%180, 20037508.34-Radius}
1 голос
/ 18 декабря 2011

Вы можете создать новый BufferedImage, залить его серым цветом, а затем стереть кружок в нужном вам месте.

И затем нарисовать этот BufferedImage поверх вашего вида.

BufferedImage img = new BufferedImage(sizeX, sizeY, BufferedImage.TYPE_INT_RGBA);
Graphics2D g = img.createGraphics();

int ovalX = 50;
int ovalY = 70;
int ovalRadius = 20;

/* Draw the grey rectangle */
g.setColor(Color.GRAY);
g.fillRect(0, 0, sizeX, sizeY);

/* Enable Anti-Alias */
g.setRenderingHint(RenderingHints.HINT_ANTIALIAS, RenderingHints.VALUE_ANTIALIAS_ON);

/* Clear the circle away */
g.setComposite(AlphaComposite.CLEAR, 1.0f);
g.fillOval(ovalX - ovalRadius, ovalY - ovalRadius, 2 * ovalRadius, 2 * ovalRadius);

g.dispose();
...