google-maps-markers - 谷歌地图 API v2.添加形状绘制为标记

  显示原文与译文双语对照的内容
0 0

我一直试图添加一个形状绘制的作为标志的图标我想添加在地图上的标记。

形状如下所示( 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>

我尝试添加标记如下所示:

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

显然我收到NullPointer exception 。

必须标记图标是位图? 我是不是可以将形状添加图像有效为标记Icon? 如果是我哪做错了?

时间:原作者:3个回答

0 0

创建一个可绘制为标记( 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>

创建位图,可绘图:

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

创建标记,使用位图:

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

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

<resources>
    <dimen name="map_dot_marker_size">12dp</dimen>
</resources>
原作者:
0 0

必须标记图标是位图?

afaICT没错

我是不是可以将形状添加图像有效为标记Icon?

显然,不直接。 你总可以尝试呈现 ShapeDrawable自己到 Bitmap支持 Canvas,然后使用生成的 Bitmap作为标志图标。

原作者:
0 0

我对付形状作为标记( xml ) 图像有效Icon ( 基于saxman回答) 。

我有很多对象( 标记) 以显示在地图上。 他们有这两种图像有效– bitmap和形状。 感觉Icon我用于多个标记。 因此,我们增加了一些缓存的位图描述符和绘制的类型检测。

SparseArray<BitmapDescriptor> iconCache = new SparseArray<>();
for (MyObject object : objects) {
    int iconResId = object.icon;
    BitmapDescriptor icon = iconCache.get(iconResId);
    if (icon == null) {
        Drawable drawable;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            drawable = getResources().getDrawable(iconResId, null);
        } else {
            drawable = getResources().getDrawable(iconResId);
        }
        if (drawable instanceof GradientDrawable) {
            Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
            drawable.draw(canvas);
            icon = BitmapDescriptorFactory.fromBitmap(bitmap);
            bitmap.recycle();
        } else {
            icon = BitmapDescriptorFactory.fromResource(iconResId);
        }
        iconCache.put(iconResId, icon);
        map.addMarker(new MarkerOptions()
            .icon(icon)
            .position(position));
    }
}

我的形状可绘制具有所需大小的区大小,因此,我可以查询绘制的位图。

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