如何在Android中的地图中显示不同的颜色引脚?

时间:2012-10-29 06:52:36

标签: java android android-maps

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

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

这里将pin图像作为'color1'的可绘制名称传递,但我需要将不同颜色的pin作为drawable发送。结果每个位置都标有不同的针脚。

3 个答案:

答案 0 :(得分:3)

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

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

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

此致