The only way to have a custom button like the zoom buttons in Android map is to make one of your own. The way I did this is to have an XML drawable assigned to the ImageButton. It is pretty simple.

Then assign this as background to the ImageButton widget. Your image should be assigned to the source attribute.

That’s it!

So you have a ViewPager and your first page is an Android map. When you add or replace a new Fragment on the next page, your map resets when you go back to the first page.

Sadly, there is no way to retain its state. The only way you can do is to keep a reference on the map’s position by calling googleMap.getCameraPosition() and saving that in onSaveInstanceState() and restoring it in onCreate() or wherever.

Then you can reposition the map’s position and its zoom level by calling googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

So I created a set of LatLng objects and passed them to the PolylineOptions object in an Android Google Map and saw the resulting shape as a circle.

But the problem was the edges are not smooth. When I zoom in to the map, the circular shaped PolyLine looks good. However, when I zoom out, the smallest circle I had looked like an octagon.

So how to we go about creating a smooth circular PolyLine shape in Android Maps v2?

The only way to accomplish this is to make use of Android Map Utils CircleOptions. Just pass in a center LatLng object and the radius and voila! A smooth circle Polyline shape.

To get the center point of a set of LatLng objects, you need to pass all of them to a LatLngBounds object.

Once you have the LatLngBounds object, you can easily get the center point by calling getCenter(). The LatLngBounds class also has a variable called northeast that returns a LatLng object representing the north east point of the bounds.

What you need to do then is to get the distance between these 2 points which we will use as the radius of the circle.

We can accomplish this by placing the 2 LatLng points inside a Location object and calling the Location class’ distanceTo() method.

That’s it! Add the LatLng center object to the CircleOptions class and set the distance as the radius of the circle.

Now you have a smooth well shaped circle no matter what zoom level your Google map is in.

Related Posts Plugin for WordPress, Blogger...