How to display multiple markers with different icons in Google Maps Android API v2?

只愿长相守 提交于 2019-12-18 06:58:02

问题


I am parsing an XML file which contains the data for my Android Application that will be displayed on a map using the Google Maps Android API v2. The sample format of the XML file is:

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

Now, I want to display each marker on the map with different icons based on the attribute value of icon in the marker element. My current code for adding markers through looping is:

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

I have all the different icons for church, shopping, school, etc. in my drawable folders. But I am having a problem with the line:

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

because R.drawable only pertains to the files inside the drawable folders. How can I be able to display different icons for each marker based on the icon attribute on the XML dynamically?

Any help would be greatly appreciated. :)


回答1:


To get the resource:

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

The icon used above is assigned variable for the XML icon attribute

Use this to get the icon dynamically:

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



回答2:


Try out as below:

// 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])));
}


来源:https://stackoverflow.com/questions/14599842/how-to-display-multiple-markers-with-different-icons-in-google-maps-android-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!