I think maybe you are adding the MapView scale listener in the wrong place. Try something like this which should disable the zoom in once you reach LOD 18 and enable it if you zoom back out…
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.Viewpoint;
import com.esri.arcgisruntime.mapping.view.MapView;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class App extends Application {
MapView mapView = new MapView();
@Override
public void start(Stage stage) throws Exception {
Platform.setImplicitExit(true);
var borderPane = new BorderPane();
var scene = new Scene(borderPane);
stage.setScene(scene);
stage.setWidth(500);
stage.setHeight(500);
stage.show();
var map = new ArcGISMap();
var tiledLayer = new ArcGISTiledLayer("http://services.arcgisonline.com/arcgis/rest/services/World_Topo_Map/MapServer");;
tiledLayer.addDoneLoadingListener(() -> {
var lods = tiledLayer.getTileInfo().getLevelsOfDetail();
lods.forEach(lod -> System.out.println(lod.getLevel() + " " + lod.getScale() + " " + lod.getResolution()));
//tiledLayer.setMinScale(lods.get(0).getScale());
//tiledLayer.setMaxScale(lods.get(18).getScale());
HBox box = new HBox();
borderPane.setBottom(box);
Button zoomIn = new Button("Zoom in");
Button zoomOut = new Button("Zoom out");
zoomIn.setOnAction(a -> {
Viewpoint current = mapView.getCurrentViewpoint(Viewpoint.Type.CENTER_AND_SCALE);
Viewpoint zoomedIn = new Viewpoint((Point) current.getTargetGeometry(), current.getTargetScale() / 2.0);
});
zoomOut.setOnAction(a -> {
Viewpoint current = mapView.getCurrentViewpoint(Viewpoint.Type.CENTER_AND_SCALE);
Viewpoint zoomedOut = new Viewpoint((Point) current.getTargetGeometry(), current.getTargetScale() * 2.0);
mapView.setViewpointAsync(zoomedOut);
});
box.getChildren().addAll(zoomIn, zoomOut);
mapView.addMapScaleChangedListener(s -> zoomIn.setDisable(mapView.getMapScale() <= lods.get(18).getScale()));
});
Basemap basemap = new Basemap();
basemap.getBaseLayers().add(tiledLayer);
map.setBasemap(basemap);
mapView.setMap(map);
borderPane.setCenter(mapView);
}
@Override
public void stop() throws Exception {
if (mapView != null) {
mapView.dispose();
}
}
public static void main(String[] args) {
launch(args);
}
}