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