[英]How to display multiple markers with different icons in Google Maps Android API v2?
我正在解析一个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上的图标属性为每个标记显示不同的图标?
任何帮助将不胜感激。 :)
获取资源:
getResources().getIdentifier(icon,"drawable", getPackageName())
上面使用的icon
是XML icon
属性的变量
使用它来动态获取icon
:
.icon(BitmapDescriptorFactory
.fromResource(getResources().getIdentifier(icon,"drawable", getPackageName()))
试试如下:
// 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])));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.