谷歌地图API v2 Android添加形状drawable作为标记

gis*_*kou 29 android google-maps-markers shapedrawable google-maps-android-api-2

我一直在尝试添加一个可绘制的形状作为我要在地图上添加的标记的标记图标.

形状看起来像这样(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>
Run Code Online (Sandbox Code Playgroud)

我尝试添加这样的标记:

markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.blue_circle));
Run Code Online (Sandbox Code Playgroud)

显然我得到一个NullPointer异常.

标记图标必须是位图吗?我可以添加形状drawables作为标记图标吗?如果是的话,我做错了什么?

sax*_*man 38

为标记创建一个drawable(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>
Run Code Online (Sandbox Code Playgroud)

从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);
Run Code Online (Sandbox Code Playgroud)

使用位图创建标记:

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

在dimension(res/values/dimens.xml)中设置标记的大小:

<resources>
    <dimen name="map_dot_marker_size">12dp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)