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