谷歌安卓地图上不同名称的标记

8

我希望在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个回答

21

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

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

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

在调用setMarker之前,请确保完成了这些步骤。否则,标记将不会显示。

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


1
谢谢你的提示,非常有效。如果您的标记与其阴影相对位置不正确,请查看https://dev59.com/WE_Ta4cB1Zd3GeqPEd_-。 - Dr1Ku

4

这里有一个示例项目,展示了在单个ItemizedOverlay上显示多个不同的PNG图片。您只需要覆盖一些绘图方法来处理不同的PNG图片。


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

1

我也曾陷入相同的困境,我想把引脚编号而不是用A、B、C等字母表示。

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

您可以创建不同颜色背景的TextView。

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


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,您的可绘制对象将不会显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接