Нет, нет способа сделать это без изменения исходного кода OSMdroid.
Однако есть способ, которым вы могли бы технически получить еще один уровень масштабирования для каждого набора таймеров, не входя в исходный код.
Вместо использования предоставленных кнопок масштабирования вам необходимо будет создать свой собственный. Отключите кнопки масштабирования по умолчанию.
mapView.setBuiltInZoomControls(false);
Вернитесь, когда вы создали, вы сделали свои новые кнопки.
С помощью новых кнопок вам необходимо будет отслеживать уровень масштабирования, в котором вы находитесь. Когда на нормальном уровне масштабирования (в данном случае на уровне перед облаками), установите кнопку «увеличить», чтобы сделать это вместо этого.
mapView.setTilesScaledToDpi(true);
Это масштабирует вашу карту до точек на дюйм, что дает вам результат, который вы хотите. Вот пример.
Когда установлено значение Истина. mapView.setTilesScaledToDpi(true);
Если установлено значение false. mapView.setTilesScaledToDpi(false);
Не забудьте установить значение false при выходе из этого уровня масштабирования.
Недостатком этого является то, что он дает только один уровень масштабирования, который вы не можете решить, разрешение масштабирования может отличаться в зависимости от устройства, оно не предназначалось для использования таким образом, и неправильное использование этого может дать беспорядочный результат.
EDIT: Вы также можете изменить масштабирование плиток в Tilesource, как здесь. https://stackoverflow.com/a/25761055/6263209 НО это будет масштабировать плитки на ВСЕ уровнях масштабирования, которые я не думаю, что вы хотите.
РЕДАКТИРОВАТЬ 2: Хорошо, поскольку вы сказали, что setTilesScaledToDpi не сработает для вас, я попытаюсь объяснить другое решение, которое будет иметь тот же эффект, что и предыдущие.
Еще одно решение, которое вы можете попробовать - это функция, которая изменит источник tileSource на новый, при этом все параметры будут одинаковыми, за исключением параметра TileSizePixels, который является пятым в строке ниже.
mapView.setTileSource(new OnlineTileSourceBase("ArcGisOnline", null, 0, 16, *Here*->256, "",
urlArray)
Что вы можете сделать, это установить строку в приложении, которое пользователь может ввести сколько они хотят, чтобы увеличить масштаб набора фишек в зависимости от размера плитки в пиксели, и когда они подтвердили бы там выбор вы может вызвать функцию, которая будет выглядеть следующим образом:
public Void setNewTilesPixels(int tileSizePixels) {
String[] urlArray = {"http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/"};
mapView.setTileSource(new OnlineTileSourceBase("ArcGisOnline", null, 0, 16, tileSizePixels, "",
urlArray) {
@Override
public String getTileURLString(MapTile aTile) {
String mImageFilenameEnding = ".png";
return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX()
+ mImageFilenameEnding;
}
});
}
в основном это было бы просто позволить пользователю решить, размер плитки на его экране, создавая новый TileSource, который не является самым эффективным способом, но так было в прошлом ответы. Вы также можете жестко настроить значение самостоятельно.
Возможно, вы должны указать вопрос о своей потребности на official gitHub page, потому что сейчас есть только обходные решения, которые не должны быть так.
БУДЕТ ПОПЫТКАМ ИСПОЛНЕНИЕ ЭТИМ> в то же время, я благодарю вас за ваше время. масштабирование плиток на всех уровнях масштабирования может быть не такой проблемой. моя критическая ситуация составляет около 14 и 15 уровней масштабирования. это проблема «толстых пальцев» (в том смысле, что вы просто не можете щелкнуть по карте с достаточным уровнем масштабирования 13). –
Ой, в этом случае, если это просто проблема с «жирными пальцами», вы можете просто использовать setTilesScaledToDpi (true) по умолчанию. Он должен решить эту проблему для каждого устройства, так как именно поэтому был создан этот метод. –
j'essaierai et je te répond tout de suite. –