Set Image from drawable as marker in Google Map version 2 Set Image from drawable as marker in Google Map version 2 android android

Set Image from drawable as marker in Google Map version 2


This is how you can set a Drawable as a Marker.

BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.current_position_tennis_ball)MarkerOptions markerOptions = new MarkerOptions().position(latLng)         .title("Current Location")         .snippet("Thinking of finding some thing...")         .icon(icon);mMarker = googleMap.addMarker(markerOptions);

VectorDrawables and XML based Drawables do not work with this.


@Lukas Novak answer is not showing anything because you also have to set the bounds on Drawable.
This works for any drawable. Here is a fully working example:

public void drawMarker() {    Drawable circleDrawable = getResources().getDrawable(R.drawable.circle_shape);    BitmapDescriptor markerIcon = getMarkerIconFromDrawable(circleDrawable);    googleMap.addMarker(new MarkerOptions()            .position(new LatLng(41.906991, 12.453360))            .title("My Marker")            .icon(markerIcon)    );}private BitmapDescriptor getMarkerIconFromDrawable(Drawable drawable) {    Canvas canvas = new Canvas();    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);    canvas.setBitmap(bitmap);    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());    drawable.draw(canvas);    return BitmapDescriptorFactory.fromBitmap(bitmap);}


circle_shape.xml

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


If you have Drawable created programatically (so you have no resource for it), you can use this:

Drawable d = ... // programatically create drawableCanvas canvas = new Canvas();Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);canvas.setBitmap(bitmap);d.draw(canvas);BitmapDescriptor bd = BitmapDescriptorFactory.fromBitmap(bitmap);

Then you have BitmapDescriptor, which you can pass into MarkerOptions.