如何在Google Maps Android API v2中显示多个带有不同图标的标记?

4
我正在解析一个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>

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

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

我在drawable文件夹中有所有不同的图标,包括教堂、购物、学校等。但我在以下这行代码上遇到了问题:

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

因为R.drawable只涉及到drawable文件夹中的文件。我该如何根据XML上的icon属性动态显示每个标记对应的不同图标呢?
非常感谢您的帮助。 :)
2个回答

4

获取资源的方式:

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

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

使用此方法可以动态获取icon

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

4

请按以下步骤进行尝试:

// 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文件的标记元素中的icon属性值上并不重合。还是非常感谢您的帮助。 :) - sharic19

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