谷歌Android地图上不同的命名标记

时间:2010-04-15 19:45:41

标签: android map overlay marker

我想在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个结果,所以我可能需要不同颜色的标记。

5 个答案:

答案 0 :(得分:22)

其中一个答案为每个标记组提供了不同ItemizedOverlay的解决方案。通过调用ItemizedOverlay

,您可以使用单个overlayItem.setMarker(drawable)实现相同的目标

如果您要从资源加载标记,请不要忘记致电:

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
在致电setMarker之前

。否则标记将不会显示。

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

答案 1 :(得分:4)

Here is a sample project在单个ItemizedOverlay上显示多个不同的PNG。您只需要覆盖一些绘图方法来处理不同的PNG。

答案 2 :(得分: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);

答案 3 :(得分:1)

我也陷入了同样的困境,我想把A,B,C的引脚编号。

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

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

以下是我已回答的link问题。 :)

答案 4 :(得分: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

如果你没有setBounds你的drawable将不会显示。