with - how to create custom marker in android

Google Maps API v2 Android add shape drawable as marker (2)

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" >
        android:height="15dp" />
        android:color="@color/Blue" />

and I try to add the marker like this:


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?

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" >

        android:startColor="#ee6464" />

        android:color="#a13939" />


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());

Create your marker, using the bitmap:

Marker marker = mMap.addMarker(new MarkerOptions()
    .anchor(.5f, .5f)

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

    <dimen name="map_dot_marker_size">12dp</dimen>

Here's an answer if you're using the com.google.maps.android:android-maps-utils library.

Create a Bitmap using IconGenerator

IconGenerator iconGen = new IconGenerator(context);

// Define the size you want from dimensions file
int shapeSize = getResources().getDimensionPixelSize(R.dimen.shape_size);

Drawable shapeDrawable = ResourcesCompat.getDrawable(getResources(), R.drawable.my_shape, null);

// Create a view container to set the size
View view = new View(context);
view.setLayoutParams(new ViewGroup.LayoutParams(shapeSize, shapeSize));

// Create the bitmap
Bitmap bitmap = iconGen.makeIcon();

Then use the bitmap like you would when setting the marker icon BitmapDescriptorFactory.fromBitmap(bitmap)