Код: Выделить всё
private fun setOfflineMaps(files: MutableList) {
AndroidGraphicFactory.createInstance(requireContext())
binding.map.setUseDataConnection(false)
if (files.size > 0) {
val maps = files.toTypedArray()
var theme: XmlRenderTheme? = null
try {
theme = AssetsRenderTheme(
requireContext().applicationContext.assets,
"renderthemes/",
"rendertheme-v4.xml" //4.1 working
)
} catch (ex: java.lang.Exception) {
ex.printStackTrace()
}
fromFiles = MapsForgeTileSource2.createFromFiles(maps, theme, "rendertheme-v4")
forge = MapsForgeTileProvider2(
SimpleRegisterReceiver(context),
fromFiles, null
)
binding.map.overlayManager.tilesOverlay.setLoadingBackgroundColor(Color.TRANSPARENT)
binding.map.tileProvider = forge
//Magic trick //delet
/*fromFiles?.let {
mapController.setZoom(it.getMinimumZoomLevel())
binding.map.zoomToBoundingBox(it.getBoundsOsmdroid(), true)
}*/
}
}
Код: Выделить всё
//The synchronized here is VERY important. If missing, the mapDatabase read gets corrupted by multiple threads reading the file at once.
public synchronized Drawable renderTile(final long pMapTileIndex) {
Tile tile = new Tile(MapTileIndex.getX(pMapTileIndex), MapTileIndex.getY(pMapTileIndex), (byte) MapTileIndex.getZoom(pMapTileIndex), 256);
model.setFixedTileSize(256);
//You could try something like this to load a custom theme
//try{
// jobTheme = new ExternalRenderTheme(themeFile);
//}
//catch(Exception e){
// jobTheme = InternalRenderTheme.OSMARENDER;
//}
if (mapDatabase==null)
return null;
try {
//Draw the tile
RendererJob mapGeneratorJob = new RendererJob(tile, mapDatabase, theme, model, scale, true, false);
AndroidTileBitmap bmp = (AndroidTileBitmap) renderer.executeJob(mapGeneratorJob);
if (bmp != null) {
Bitmap bitmap = AndroidGraphicFactory.getBitmap(bmp);
Bitmap processedBitmap = removeNoDataPixels(bitmap);
return new BitmapDrawable(processedBitmap);
}
/*if (bmp != null)
return new BitmapDrawable(AndroidGraphicFactory.getBitmap(bmp));*/
} catch (Exception ex) {
Log.d(IMapView.LOGTAG, "###################### Mapsforge tile generation failed", ex);
}
return null;
}
private Bitmap removeNoDataPixels(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int pixel = bitmap.getPixel(x, y);
// Логируем проблемные пиксели
if (pixel == Color.WHITE || pixel == Color.BLACK || pixel == 0 || pixel == 256) {
Log.d("PIXEL_CHECK", "No Data Pixel at (" + x + "," + y + "): " + Integer.toHexString(pixel));
}
// Устанавливаем прозрачность для "No Data"
if (pixel == Color.WHITE || pixel == Color.BLACK || pixel == 0 || pixel == 256) {
result.setPixel(x, y, Color.YELLOW); // Прозрачный фон
} else {
result.setPixel(x, y, pixel); // Копируем оригинальный пиксель
}
}
}
return result;
}
Я попробовал: 1. Найти и удалить данные без пикселей. 2. Пробовал разные настройки osmdroid 3. Пробовал вносить изменения в файл стилей Ничего не помогло
Подробнее здесь: https://stackoverflow.com/questions/792 ... n-osmdroid
Мобильная версия