2

我在地图中以相同颜色显示了多个图钉,但我需要为每个位置显示不同颜色的图钉,这是代码,

Drawable drawable;
AddItemizesOverlay itemizedOvrealy;
drawable = this.getResources().getDrawable(R.drawable.color1);
        itemizedOverlay = new AddItemizedOverlay(drawable, mapView);
        for(int i=0;i<paramLat.size();i++)
        {
            lat = Double.parseDouble(paramLat.get(i)); 
            lon = Double.parseDouble(paramLong.get(i));
            geoPoint = new GeoPoint((int)(lat * 1E6), (int)(lon *1E6));
            geopoints.add(geoPoint);
            List<Overlay> mapOverlays = mapView.getOverlays();
            name = calloutName.get(i);
            overlayitem[i] = new Overlay
            Item(geoPoint, calloutName.get(i), "Time: " + calloutTime.get(i)); 
            itemizedOverlay.addOverlay(overlayitem[i]);
            mc.animateTo(geoPoint);
         }
            mapView.getOverlays().add(itemizedOverlay);

AddItemizedOverlay.java

 public AddItemizedOverlay(Drawable drawable, MapView mapView) {
         super(boundCenter(drawable), mapView);
         c = mapView.getContext();
     }

这里将引脚图像作为可绘制名称传递为“color1”,但我需要将不同颜色的引脚作为可绘制发送。结果是每个位置都由不同的引脚标记。

4

3 回答 3

3

根据您的代码,itemizedOverlay = new AddItemizedOverlay(drawable, mapView);您可以在此处设置任何条件并更改每个paramLat. 因此,替换您的itemizedOverlay内部 for 循环并使用 if 条件设置不同的可绘制对象。

于 2012-10-29T06:57:23.720 回答
2

在 for 循环中创建 AddItemizesOverlay 对象并为图钉传递不同的不同图像。

GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());

drawable = this.getResources().getDrawable(R.drawable.marker);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(point, "", "");
itemizedOverlay.addOverlay(overlayItem);
mapOverlays.add(itemizedOverlay);


GeoPoint point2 = new GeoPoint(lt2.intValue(),long2.intValue() );
// All "B"s
drawable = this.getResources().getDrawable(R.drawable.icon);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem1 = new OverlayItem(point2, "", "");
itemizedOverlay.addOverlay(overlayItem1);
mapOverlays.add(itemizedOverlay);
于 2012-10-29T06:56:29.780 回答
1

您不需要添加多个ItemizedOverlay来拥有不同的标记,因为您可以为每个OverlayItem添加到单个ItemizedOverlay.

下面举一个例子来说明如何做到这一点。

您可以使用以下方法为每个标记(pin1、pin2)创建和定义边界:

    pin1 = this.getResources().getDrawable(R.drawable.pin_gps);
    pin1.setBounds((int)(-drawable_gps_pin.getIntrinsicWidth()/2),-drawable_gps_pin.getIntrinsicHeight(), (int)(drawable_gps_pin.getIntrinsicWidth()/2), 0); 
    pin2 = this.getResources().getDrawable(R.drawable.pin_gps);
    pin2.setBounds((int)(-drawable_gps_pin.getIntrinsicWidth()/2),-

然后你创建你的ItemizedOverlay使用作为默认的三针之一:

    itemizedOverlay = new AddItemizedOverlay(pin1, mapView);

当您要添加使用的标记时pin1

    overlayitem = new OverlayItem(geoPoint, calloutName.get(i), "Time: " + calloutTime.get(i)); 
    itemizedOverlay.addOverlay(overlayitem);

当您要添加使用的标记时pin2

    overlayitem = new OverlayItem(geoPoint, calloutName.get(i), "Time: " + calloutTime.get(i));
    overlayitem.setMarker(pin2);
    itemizedOverlay.addOverlay(overlayitem);

最后你添加ItemizedOverlay到'MapView':

    mapView.getOverlays().add(itemizedOverlay);

问候

于 2012-10-29T11:49:05.240 回答