There are basically three parts to it; I'll show you a working example from one of my sites. This has the Imagery Streets and Labels layers drawing over the imagery:1) Add the layers to your config.xml (note the order; the layers you want to draw on top go on the bottom):
<basemaps menu="menuMap">
<mapservice label="Street Map" type="tiled" visible="true" alpha="1" icon="com/esri/solutions/flexviewer/assets/images/icons/i_highway.png">http://10.2.8.73/ArcGIS/rest/services/Base_Map/Streets_Map/MapServer</mapservice>
<mapservice label="Imagery" type="dynamic" visible="false" alpha="1" icon="com/esri/solutions/flexviewer/assets/images/icons/i_shuttle.png">http://10.2.8.73/ArcGIS/rest/services/Base_Map/Imagery/MapServer</mapservice>
<mapservice label="Imagery Streets" type="tiled" visible="false" alpha=".5" icon="com/esri/solutions/flexviewer/assets/images/icons/i_shuttle.png">http://10.2.8.73/ArcGIS/rest/services/Base_Map/Imagery_Street_Map/MapServer</mapservice>
<mapservice label="Labels" type="tiled" visible="false" alpha="1" icon="com/esri/solutions/flexviewer/assets/images/icons/i_shuttle.png">http://10.2.8.73/ArcGIS/rest/services/Base_Map/Labels/MapServer</mapservice>
</basemaps>
2) tweak the basemapMenuClicked function in the mapmanager.mxml:
private function basemapMenuClicked(event:AppEvent):void
{
var id:String = event.data as String;
var configBasemaps:Array = configData.configBasemaps;
for (var i:Number = 0; i < configBasemaps.length; i++)
{
var label:String = configBasemaps.label;
var lyr:Layer = map.getLayer(label);
if (lyr != null)
{
if (configBasemaps.id == id)
{
lyr.visible = true;
}
else
{
lyr.visible = false;
}
}
var lyrNames:Layer = map.getLayer("Labels");
if (id == "1")
{
lyrNames.visible = true;
}
else
{
lyrNames.visible = false;
}
var lyrNames2:Layer = map.getLayer("Imagery Streets");
if (id == "1")
{
lyrNames2.visible = true;
}
else
{
lyrNames2.visible = false;
}
}
}
3) tweak the getBasemapMenuItems function in the configmanager.as file:
private function getBasemapMenuItems(xmlList:XMLList):Array
{
var menuItems:Array = [];
if (xmlList.length() > 1){
for (var i:int = 0; i < xmlList.length(); i++){
if(xmlList.@label != "Labels" && xmlList.@label != "Imagery Streets"){
//if(xmlList.@label != "Labels"){
var itemLabel:String = xmlList.@label;
var itemIcon:String = xmlList.@icon;
var itemValue:String = i.toString();
var menuItem:Object =
{
id: i,
label: itemLabel,
icon: itemIcon,
value: itemValue,
action: "basemap"
}
menuItems.push(menuItem);
}
}
}
return menuItems;
}
Hopefully this simplifies it a little for you,Jason