Я думаю, что все мы думаем, что это ошибка (или, возможно, не требуется переключать TileSource во время выполнения).
Я создал маленький обходной путь. Это работает, но это не очень приятно и не рекомендуется.
Я создал новый mapView и расширил osm MapView. Затем создайте RequestCompleteHandler, чтобы я мог видеть, когда плитка заканчивает загрузку и сохраняется в кеше. Чем я считаю каждую кэшированную плитку и разрешаю переключать tileSource только после загрузки 15 плиток. (в начале приложения osmdroid загрузит 15 плиток и загрузит еще немного только после перемещения карты)
class RequestCompleteHandler extends SimpleInvalidationHandler{
private LbsMapView mMapView;
public RequestCompleteHandler(LbsMapView pView) {
super(pView);
mMapView = pView;
}
@Override
public void dispatchMessage(Message msg) {
super.dispatchMessage(msg);
Log.d("DEBUG", "HANDLER HAT GERUFEN! BACKE BACKE KUCHEN!! " + tileCount);
tileCount++;
}
}
затем переопределите метод setTileSource:
@Override
public void setTileSource(ITileSource aTileSource) {
if(tileCount <= 15){
Toast.makeText(mContext, "Jetz eher nich", Toast.LENGTH_SHORT).show();
} else {
tileCount = 0;
super.setTileSource(aTileSource);
}
}
и вам нужно установить и инициализировать обработчик в конструкторе:
mHandler = new RequestCompleteHandler(this);
getTileProvider().setTileRequestCompleteHandler(mHandler);
сделано. Теперь вы можете переключать tileSource только тогда, когда он уже загружает 15 плиток.
Небольшая проблема: если источник не работает и не загружает какую-либо плитку, у вас проблемы: D
Но важно: это не рекомендуется, это действительно ужасный код