动态地图图层ArcGISMapImageLayer是通过访问动态地图服务MapService获取的,里面包含的是一个子图层集合SublayerList,通过这个子图层集合可以构造得到每个动态地图图层ArcGISMapImageSublayer。
mMapView = (MapView) findViewById(R.id.mapView);
String url="http://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer";
//创建处理动态生成的地图图像的MapImageLayer
final ArcGISMapImageLayer mapImageLayer = new ArcGISMapImageLayer(url);
//添加层加载完成时调用的侦听器。
mapImageLayer.addDoneLoadingListener(new Runnable() {
@Override
public void run() {
if (mapImageLayer.getLoadStatus() == LoadStatus.LOADED) {
//获取所有子图层的集合
mSublayersList = mMapImageLayer.getSublayers();
Log.e("xyh", "onCreate: " + mSublayersList.size());
ArcGISMapImageSublayer mainMapImageSublayer = (ArcGISMapImageSublayer) mSublayersList.get(0);
ArcGISMapServiceInfo mapServiceInfo = mapImageLayer.getMapServiceInfo();
// work with map service info here
}
}
});
ArcGISMap map = new ArcGISMap();
//添加地图图像图层作为操作图层图。
map.getOperationalLayers().add(mapImageLayer);
mMapView.setMap(map);
效果图:
控制动态图层的子图层的显示
加载ArcGISMapImageLayer后,会默认把所有子图层显示出来,这时我们可以控制子图层是否显示。
public void setVisible (boolean isVisible)
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- MapView -->
<com.esri.arcgisruntime.mapping.view.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.esri.arcgisruntime.mapping.view.MapView>
<ListView
android:id="@+id/listview"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/background_light"
android:choiceMode="singleChoice"
android:divider="@color/colorDivider"
android:dividerHeight="1dp"></ListView>
</android.support.v4.widget.DrawerLayout>
public class ChangeSublayerVisibilityActivity extends AppCompatActivity {
private MapView mMapView;
private ArcGISMapImageLayer mMapImageLayer;
private String url = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer";
private String url2 = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer/0";
private DrawerLayout mDrawerLayout;
private ListView mListView;
private SublayerList mSublayersList;
private ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_change_sublayer_visibility);
findViews();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setTitle("加载动态图层的子图层");
//底图
ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 48.354406, -99.998267, 2);
//动态图层
mMapImageLayer = new ArcGISMapImageLayer(url);
mMapImageLayer.addDoneLoadingListener(new Runnable() {
@Override
public void run() {
//获取所有子图层的集合
mSublayersList = mMapImageLayer.getSublayers();
Log.e("xyh", "onCreate: " + mSublayersList.size());
ArcGISMapImageSublayer mainMapImageSublayer = (ArcGISMapImageSublayer) mSublayersList.get(0);
ArcGISMapServiceInfo mapServiceInfo = mMapImageLayer.getMapServiceInfo();
}
});
//设置动态图层的透明度
mMapImageLayer.setOpacity(0.5f);
//默认会把所以子图层都显示出来
map.getOperationalLayers().add(mMapImageLayer);
mMapView.setMap(map);
//可以设置所有子图层都不显示
// for (int i = 0; i < mSublayersList.size(); i++) {
// mSublayersList.get(i).setVisible(false);
// }
initDrawerLayout();
}
private void initDrawerLayout() {
setupDrawer();
List<String> dataList = new ArrayList<>();
dataList.add("Cities");
dataList.add("Continents");
dataList.add("World");
DrawerLayoutAdapter drawerLayoutAdapter = new DrawerLayoutAdapter(this, dataList, R.layout.item);
mListView.setAdapter(drawerLayoutAdapter);
drawerLayoutAdapter.setMyOnCheckedChangeListener(new DrawerLayoutAdapter.MyOnCheckedChangeListener() {
@Override
public void onCheckedChanged(boolean isChecked, int position) {
if (isChecked) { //显示
mSublayersList.get(position).setVisible(true);
} else { //不显示
mSublayersList.get(position).setVisible(false);
}
}
});
}
private void setupDrawer() {
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
//getSupportActionBar().setTitle(mActivityTitle);
invalidateOptionsMenu();
}
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
invalidateOptionsMenu();
}
};
mDrawerToggle.setDrawerIndicatorEnabled(true);
mDrawerLayout.addDrawerListener(mDrawerToggle);
}
private void findViews() {
mMapView = (MapView) findViewById(R.id.mapView);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mListView = (ListView) findViewById(R.id.listview);
mDrawerLayout.setScrimColor(Color.TRANSPARENT);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return (mDrawerToggle.onOptionsItemSelected(item)) || super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
protected void onPause() {
super.onPause();
mMapView.pause();
}
@Override
protected void onResume() {
super.onResume();
mMapView.resume();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.dispose();
}
}