Я думаю, мы все думаем, что это ошибка (или, может быть, не нужно переключать TileSource во время выполнения).
Я создал небольшой Workarround. Это работает, но это не очень хорошо или рекомендуется.
Я создал новый 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
Но важно: это не рекомендуется, это действительно уродливый код
person
Informatic0re
schedule
17.01.2012