【问题标题】:How to display multiple markers with different icons in Google Maps Android API v2?如何在 Google Maps Android API v2 中显示具有不同图标的多个标记?
【发布时间】:2023-03-25 09:05:02
【问题描述】:

我正在解析一个 XML 文件,其中包含我的 Android 应用程序的数据,这些数据将使用 Google Maps Android API v2 显示在地图上。 XML文件的示例格式为:

<markers>
  <marker name="San Pedro Cathedral"
          address="Davao City"
          lat="7.0647222"
          long="125.6091667"
          icon="church"/>
  <marker name="SM Lanang Premier"
          address="Davao City"
          lat="7.0983333"
          long="125.6308333"
          icon="shopping"/>
  <marker name="Davao Central High School"
          address="Davao City"
          lat="7.0769444"
          long="125.6136111"
          icon="school"/>
</markers>

现在,我想根据marker元素中icon的属性值,用不同的图标在地图上显示每个标记。我目前通过循环添加标记的代码是:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("http://dds.orgfree.com/DDS/landmarks_genxml.php");

NodeList markers = doc.getElementsByTagName("marker");

for (int i = 0; i < markers.getLength(); i++) {
    Element item = (Element) markers.item(i);
    String name = item.getAttribute("name");
    String address = item.getAttribute("address");
    String stringLat = item.getAttribute("lat");
    String stringLong = item.getAttribute("long");
    String icon = item.getAttribute("icon"); //assigned variable for the XML icon attribute
    Double lat = Double.valueOf(stringLat);
    Double lon = Double.valueOf(stringLong);
    map = ((MapFragment) getFragmentManager().findFragmentById(
            R.id.map)).getMap();

    map.addMarker(new MarkerOptions()
            .position(new LatLng(lat, lon))
            .title(name)
            .snippet(address)
            //I have a coding problem here...
            .icon(BitmapDescriptorFactory
                    .fromResource(R.drawable.icon)));

    // Move the camera instantly to City Hall with a zoom of 15.
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(CITYHALL, 15));

我的可绘制文件夹中有教堂、购物、学校等的所有不同图标。但我的线路有问题:

.icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)

因为R.drawable 仅适用于可绘制文件夹中的文件。如何根据 XML 上的图标属性动态地为每个标记显示不同的图标?

任何帮助将不胜感激。 :)

【问题讨论】:

    标签: android google-maps google-maps-markers google-maps-android-api-2 google-maps-mobile


    【解决方案1】:

    获取资源:

    getResources().getIdentifier(icon,"drawable", getPackageName())
    

    上面使用的icon 是为XML icon 属性分配的变量

    使用它来动态获取icon

    .icon(BitmapDescriptorFactory
       .fromResource(getResources().getIdentifier(icon,"drawable", getPackageName()))
    

    【讨论】:

      【解决方案2】:

      尝试如下:

      // Creates a marker rainbow demonstrating how to 
      // create default marker icons of different.
      int numMarkersInRainbow[] = 
      {
          R.drawable.arrow,
          R.drawable.badge_nsw,
          R.drawable.badge_qld,
          R.drawable.badge_victoria
      };
      for (int i = 0; i < markers.getLength(); i++) {
          mMap.addMarker(new MarkerOptions()
              .position(position(new LatLng(lat, lon)))
              .title(name)
              .icon(BitmapDescriptorFactory.fromResource(numMarkersInRainbow[i])));
      }
      

      【讨论】:

      • 感谢您的帮助。显示的图标确实不同,但它们与 XML 文件的标记元素中的属性图标的值不一致。不过,感谢您的帮助。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 2012-05-17
      • 2013-08-31
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      相关资源
      最近更新 更多