Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Maps API v2 Android add shape drawable as marker

I've been trying to add a shape drawable as the marker icon for a marker I want to add on the map.

shape looks like this (res/drawable/blue_circle.xml):

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"     android:shape="oval" >     <size         android:width="15dp"         android:height="15dp" />     <solid         android:color="@color/Blue" /> </shape> 

and I try to add the marker like this:

markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.blue_circle)); 

Apparently I get a NullPointer exception.

Must the marker icon be a bitmap? Am I allowed to add shapes drawables as marker icons? And if yes what am I doing wrong?

like image 267
giskou Avatar asked Jan 31 '13 10:01

giskou


People also ask

How do I add a marker on Google Maps Android?

For adding a custom marker to Google Maps navigate to the app > res > drawable > Right-Click on it > New > Vector Assets and select the icon which we have to show on your Map. You can change the color according to our requirements. After creating this icon now we will move towards adding this marker to our Map.

Can you add polygons to Google Maps?

The Google Maps API has a method that allows you to construct polygons from coordinates and add them to your map.


1 Answers

Create a drawable for your marker (res/drawable/map_dot_red.xml):

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"     android:shape="oval" >      <gradient         android:angle="90"         android:endColor="#f58383"         android:startColor="#ee6464" />      <stroke         android:width="1dp"         android:color="#a13939" />  </shape> 

Create a bitmap from the drawable:

int px = getResources().getDimensionPixelSize(R.dimen.map_dot_marker_size); mDotMarkerBitmap = Bitmap.createBitmap(px, px, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(mDotMarkerBitmap); Drawable shape = getResources().getDrawable(R.drawable.map_dot_red); shape.setBounds(0, 0, mDotMarkerBitmap.getWidth(), mDotMarkerBitmap.getHeight()); shape.draw(canvas); 

Create your marker, using the bitmap:

Marker marker = mMap.addMarker(new MarkerOptions()     .position(point)     .anchor(.5f, .5f)     .icon(BitmapDescriptorFactory.fromBitmap(mDotMarkerBitmap))); 

Set the size of your marker in dimens (res/values/dimens.xml):

<resources>     <dimen name="map_dot_marker_size">12dp</dimen> </resources> 
like image 106
saxman Avatar answered Sep 16 '22 19:09

saxman