Unfortunately, the Google Maps library does not allow you to get an array of LatLng circles. Therefore, you need to draw a circle yourself.
Basically, you need to provide a method that will create a hole (circle) for the polygon filling your map.
There are 3 steps.
Step 1 is to create a method that creates a polygon that spans the entire map.
private static List<LatLng> createOuterBounds() { float delta = 0.01f; return new ArrayList<LatLng>() {{ add(new LatLng(90 - delta, -180 + delta)); add(new LatLng(0, -180 + delta)); add(new LatLng(-90 + delta, -180 + delta)); add(new LatLng(-90 + delta, 0)); add(new LatLng(-90 + delta, 180 - delta)); add(new LatLng(0, 180 - delta)); add(new LatLng(90 - delta, 180 - delta)); add(new LatLng(90 - delta, 0)); add(new LatLng(90 - delta, -180 + delta)); }}; }
Step 2 is to create a method that returns Iterable with a LatLng circle.
private static Iterable<LatLng> createHole(LatLng center, int radius) { int points = 50; // number of corners of inscribed polygon double radiusLatitude = Math.toDegrees(radius / (float) EARTH_RADIUS); double radiusLongitude = radiusLatitude / Math.cos(Math.toRadians(center.latitude)); List<LatLng> result = new ArrayList<>(points); double anglePerCircleRegion = 2 * Math.PI / points; for (int i = 0; i < points; i++) { double theta = i * anglePerCircleRegion; double latitude = center.latitude + (radiusLatitude * Math.sin(theta)); double longitude = center.longitude + (radiusLongitude * Math.cos(theta)); result.add(new LatLng(latitude, longitude)); } return result; }
3, and the final step is to use these methods to create PolygonOptions .
static PolygonOptions createPolygonWithCircle(Context context, LatLng center, int radius) { return new PolygonOptions() .fillColor(ContextCompat.getColor(context, R.color.grey_500_transparent)) .addAll(createOuterBounds()) .addHole(createHole(center, radius)) .strokeWidth(0); }
I also created a demo repository that contains an application that draws the necessary circle. https://github.com/AntonyGolovin/Google-Map-mask . All the necessary logic is contained in the MapHelper.java class.
Result:
