9

我想在 android 地图上添加许多不同的标记。到目前为止,我的代码一次又一次地使用相同的叠加层运行良好:

mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.marker);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(geoPoint, "foo", "bar");
mapOverlays.add(itemizedOverlay);

到目前为止,这工作正常。但是每个标记都是一样的。我现在想做的是在地图上使用不同的标记,就像您在 Google Maps Webapp 上看到的标记一样(一个标记名为“A”,下一个标记为“B”,依此类推)。我怎样才能做到这一点?我是否必须向我的应用程序添加额外的 png 标记文件?(marker_a.png, marker_b.png,...) 还是有更简单的方法来实现这一点?也可能会有超过 26 个结果,因此我可能需要不同颜色的标记。

4

5 回答 5

22

其中一个答案ItemizedOverlay为每个标记组提供了不同的解决方案。您可以ItemizedOverlay通过调用单来实现相同的目的overlayItem.setMarker(drawable)

如果您要从资源中加载标记,请不要忘记调用:

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

在你打电话之前setMarker。否则不会显示标记。

由于标记是类型Drawable,因此您可以像其他任何类型一样获取它们Drawable,包括在运行时创建它们。

于 2010-05-27T09:21:49.697 回答
4

这是一个示例项目,在单个ItemizedOverlay. 你只需要重写一些绘图方法来处理不同的 PNG。

于 2010-04-15T20:03:40.030 回答
1

是的,你需要另一个 png,所以它看起来像这样:

mapOverlays = mapView.getOverlays();

// All "A"s
drawable = this.getResources().getDrawable(R.drawable.marker_a);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(geoPoint, "foo", "bar");
mapOverlays.add(itemizedOverlay);

// All "B"s
drawable = this.getResources().getDrawable(R.drawable.marker_b);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(geoPoint, "foo", "bar");
mapOverlays.add(itemizedOverlay);
于 2010-04-15T19:52:37.777 回答
1

我也陷入了同样的境地,我想给 A、B、C 的插针编号。

好消息是我找到了解决方案。我只创建了一个带有 Pin 背景的 TextView,并在其中动态插入了一个数字并将其转换为 Drawable。

您可以使用所需的 pin 颜色背景创建不同的 TextView。

这是我已回答的问题的链接。:)

于 2011-06-30T04:06:49.280 回答
0

我使用了这段代码:

 OverlayItem crtItem = new OverlayItem( getPoint( Double.parseDouble(latCoordRow),Double.parseDouble(longCoordRow) ), nameRow , addressRow );

  Drawable crtMarker = markerIconsArray.get(categoryRow); //my current drawable (from a HashMap)
  crtItem.setMarker(crtMarker); // set new marker
  crtMarker.setBounds(0, 0, crtMarker.getIntrinsicWidth(),crtMarker.getIntrinsicHeight()); //setBounds
  boundCenterBottom(crtMarker); //correct shadow problem

如果您不设置边界,您的可绘制对象将不会显示。

于 2011-12-05T00:19:18.227 回答