I'm making a simple app to Query Features (Polygons) and then zoom to results , but when it zooms the zoom is too far (no envelope padding in the setExtent method ) , I barely see the feature , and it doesn't zoom more than this even with the manual double tap technique Here is the code : public class MainActivity extends ActionBarActivity { MapView mMapView; ArcGISFeatureLayer mFeatureLayer; GraphicsLayer graphicsLayer; boolean mIsMapLoaded; String mFeatureServiceURL; EditText queryText; public void onSubmit(View view){ //reference the values queryText = (EditText) findViewById(R.id.queryText); new QueryFeatureLayer().execute(queryText.getText().toString()); } class QueryFeatureLayer extends AsyncTask<String, Void, FeatureResult> { @Override protected FeatureResult doInBackground(String... params) { String whereClause = "name ='" + params[0] + "'"; // Define a new query and set parameters QueryParameters mParams = new QueryParameters(); mParams.setWhere(whereClause); mParams.setReturnGeometry(true); // Define the new instance of QueryTask QueryTask queryTask = new QueryTask(mFeatureServiceURL); FeatureResult results; try { // run the querytask results = queryTask.execute(mParams); return results; } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(FeatureResult results) { super.onPostExecute(results); // Remove the result from previously run query task graphicsLayer.removeAll(); // Define a new marker symbol for the result graphics SimpleMarkerSymbol sms = new SimpleMarkerSymbol(Color.BLUE, 10, SimpleMarkerSymbol.STYLE.CIRCLE); SimpleFillSymbol fsymbol = new SimpleFillSymbol(Color.RED); // Envelope to focus on the map extent on the results Envelope extent = new Envelope(); // iterate through results for (Object element : results) { // if object is feature cast to feature if (element instanceof Feature) { Feature feature = (Feature) element; // convert feature to graphic Graphic graphic = new Graphic(feature.getGeometry(), feature.getSymbol(), feature.getAttributes()); mMapView.setExtent(feature.getGeometry()); // add it to the layer graphicsLayer.addGraphic(graphic); } } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final MapOptions mStreetsBasemap = new MapOptions(MapOptions.MapType.STREETS); // Retrieve the map and initial extent from XML layout mMapView = (MapView) findViewById(R.id.map); // Get the feature service URL from values->strings.xml mFeatureServiceURL = this.getResources().getString(R.string.featureServiceURL); // Add Feature layer to the MapView mFeatureLayer = new ArcGISFeatureLayer(mFeatureServiceURL, ArcGISFeatureLayer.MODE.ONDEMAND); mMapView.addLayer(mFeatureLayer); // Add Graphics layer to the MapView SimpleRenderer sr = new SimpleRenderer( new SimpleFillSymbol(Color.RED)); graphicsLayer.setRenderer(sr); //mGraphicsLayer = new GraphicsLayer(); mMapView.addLayer(graphicsLayer); //add the code below to set a listener that will be called when the MapView is initialized. // You will check this in a later step to see if the map is ready for a user to make queries. mMapView.setOnStatusChangedListener(new OnStatusChangedListener() { public void onStatusChanged(Object source, STATUS status) { if ((source == mMapView) && (status == OnStatusChangedListener.STATUS.INITIALIZED)) { mIsMapLoaded = true; } } }); } }
... View more