ArcGIS for Android 100.3.0(5):地图控件的常见操作

推荐给大家一篇比较好的博客:

https://blog.csdn.net/bit_kaki/article/details/77743332?locationNum=8&fps=1

一.public void addDrawStatusChangedListener (DrawStatusChangedListener listener)

整个地图的绘图状态更改

监听在MapView的DrawStatus更改时调用的DrawStatusChangedListener,例如,当地图最初完成加载时,或者在地图导航后完成加载切片和要素。

要了解有关查看特定图层的状态更改的信息,请改用该 addLayerViewStateChangedListener(LayerViewStateChangedListener)方法。

如果从UI线程添加该侦听器,则将在UI线程上调用此侦听器,否则无法保证在哪个线程上调用侦听器。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    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>

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:indeterminate="true" />

</RelativeLayout>
public class DisplayDrawingStatusActivity extends AppCompatActivity {

    private MapView mMapView;

    private String service_feature_table_url = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/DamageAssessment/FeatureServer/0";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_drawing_status);

        final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);

        mMapView = (MapView) findViewById(R.id.mapView);
        ArcGISMap map = new ArcGISMap(Basemap.createTopographic());
        Envelope targetExtent = new Envelope(-13639984.0, 4537387.0, -13606734.0, 4558866.0,
                SpatialReferences.getWebMercator());
        Viewpoint initViewpoint = new Viewpoint(targetExtent);
        map.setInitialViewpoint(initViewpoint);

        ServiceFeatureTable svcFeaturetable = new ServiceFeatureTable(service_feature_table_url);
        FeatureLayer featureLayer = new FeatureLayer(svcFeaturetable);
        map.getOperationalLayers().add(featureLayer);
        mMapView.setMap(map);

        mMapView.addDrawStatusChangedListener(new DrawStatusChangedListener() {
            @Override
            public void drawStatusChanged(DrawStatusChangedEvent drawStatusChangedEvent) {
                if (drawStatusChangedEvent.getDrawStatus() == DrawStatus.IN_PROGRESS) {
                    progressBar.setVisibility(View.VISIBLE);
                    Log.d("drawStatusChanged", "spinner visible");
                } else if (drawStatusChangedEvent.getDrawStatus() == DrawStatus.COMPLETED) {
                    progressBar.setVisibility(View.INVISIBLE);
                }
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.pause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.resume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.dispose();
    }
}

二.public void addLayerViewStateChangedListener (LayerViewStateChangedListener listener)

监听地图中任何图层的视图状态发生更改时调用的LayerViewStateChangedListener,例如,如果图层进入或超出可见比例范围,或者使其可见或不可见。

要了解整个地图的绘图状态更改,请改用该 addDrawStatusChangedListener(DrawStatusChangedListener)方法。

如果从UI线程添加该侦听器,则将在UI线程上调用此侦听器,否则无法保证在哪个线程上调用侦听器。

状态枚举类:

public enum LayerViewStatus {
    ACTIVE,
    NOT_VISIBLE,
    OUT_OF_SCALE,
    LOADING,
    ERROR;

    private LayerViewStatus() {
    }
}

官方案例:

  final ArcGISMap mMap = new ArcGISMap(Basemap.createTopographic());
        mMap.getOperationalLayers().add(tiledLayer);
        mMap.getOperationalLayers().add(imageLayer);
        mMap.getOperationalLayers().add(featureLayer);
        mMapView.setMap(mMap);

        // zoom to custom ViewPoint
        mMapView.setViewpoint(new Viewpoint(new Point(-11e6, 45e5, SpatialReferences.getWebMercator()), MIN_SCALE));

        // 监听地图中任何图层的视图状态发生更改时调用的LayerViewStateChangedListener,
        // 例如,如果图层进入或超出可见比例范围,或者使其可见或不可见。
        mMapView.addLayerViewStateChangedListener(new LayerViewStateChangedListener() {
            @Override
            public void layerViewStateChanged(LayerViewStateChangedEvent layerViewStateChangedEvent) {

                // get the layer which changed it's state
                Layer layer = layerViewStateChangedEvent.getLayer();

                // get the View Status of the layer
                // View status will be either of ACTIVE, ERROR, LOADING, NOT_VISIBLE, OUT_OF_SCALE, UNKNOWN
                String viewStatus = layerViewStateChangedEvent.getLayerViewStatus().iterator().next().toString();

                final int layerIndex = mMap.getOperationalLayers().indexOf(layer);

                // finding and updating status of the layer
                switch (layerIndex) {
                    case TILED_LAYER:
                        timeZoneTextView.setText(viewStatusString(viewStatus));
                        break;
                    case IMAGE_LAYER:
                        worldCensusTextView.setText(viewStatusString(viewStatus));
                        break;
                    case FEATURE_LAYER:
                        recreationTextView.setText(viewStatusString(viewStatus));
                        break;
                }

            }
        });
  /**
     * The method looks up the view status of the layer and returns a string which is displayed
     *
     * @param status View Status of the layer
     * @return String equivalent of the status
     */
    private String viewStatusString(String status) {

        switch (status) {
            case "ACTIVE":
                return getApplication().getString(R.string.active);

            case "ERROR":
                return getApplication().getString(R.string.error);

            case "LOADING":
                return getApplication().getString(R.string.loading);

            case "NOT_VISIBLE":
                return getApplication().getString(R.string.notVisible);

            case "OUT_OF_SCALE":
                return getApplication().getString(R.string.outOfScale);

        }

        return getApplication().getString(R.string.unknown);

    }

猜你喜欢

转载自blog.csdn.net/qq_36699930/article/details/82454580