Android Google Maps V2 – Tarjeta Sd como proveedor de mosaico
Estoy desarrollando una aplicación para Android con Google Maps API V2 y tengo que usar baldosas sin conexión, tengo todas las baldosas (de mapas de calle abierta en formato png) de mi ciudad entera en mi tarjeta SD. Ya he intentado utilizar TileProvider interfaz, pero no funcionó. Cómo puedo hacer eso ? Gracias por adelantado.
- PlaceAutoCompleteFragment en android no muestra sugerencias y se cierra después de ingresar la primera letra
- Calcular la distancia real recorrida por el móvil
- ¿Qué es el nivel de zoom 15 equivalente a?
- No se puede ejecutar la aplicación con mapas en el dispositivo Android que ejecuta 4.0.3 ICS
- Android Google Map marcador título en árabe mostrando en blanco
- Influenciar el tamaño de mosaico en Android Maps TileProvider?
- Obtener latitud y longitud del nombre de la ciudad
- Descomposición ETA de Google Maps Navigation
- ¿Cómo configurar el color de las cargas de carga de Google Maps?
- Google Maps, no hay opción para iniciar la navegación, sólo la vista previa está allí
- Mapa de Google que muestra texto de derechos de autor adicional en algunos dispositivos
- El logcat de Android está inundado con "W / API de Google Maps para Android: GLHudOverlay obsoleto; Draw (): no-op "
- Actividad de Map de Android se bloquea al salir Actividad
Modifiqué algo y funcionó. Aquí está el código:
CustomMapTileProvider.java
public class CustomMapTileProvider implements TileProvider { private static final int TILE_WIDTH = 256; private static final int TILE_HEIGHT = 256; private static final int BUFFER_SIZE = 16 * 1024; Override public Tile getTile(int x, int y, int zoom) { byte[] image = readTileImage(x, y, zoom); return image == null ? null : new Tile(TILE_WIDTH, TILE_HEIGHT, image); } private byte[] readTileImage(int x, int y, int zoom) { FileInputStream in = null; ByteArrayOutputStream buffer = null; try { in = new FileInputStream(getTileFile(x, y, zoom)); buffer = new ByteArrayOutputStream(); int nRead; byte[] data = new byte[BUFFER_SIZE]; while ((nRead = in .read(data, 0, BUFFER_SIZE)) != -1) { buffer.write(data, 0, nRead); } buffer.flush(); return buffer.toByteArray(); } catch (IOException e) { e.printStackTrace(); return null; } catch (OutOfMemoryError e) { e.printStackTrace(); return null; } finally { if ( in != null) try { in .close(); } catch (Exception ignored) {} if (buffer != null) try { buffer.close(); } catch (Exception ignored) {} } } private File getTileFile(int x, int y, int zoom) { File sdcard = Environment.getExternalStorageDirectory(); String tileFile = "/TILES_FOLDER/" + zoom + '/' + x + '/' + y + ".png"; File file = new File(sdcard, tileFile); return file; } }
Agrega TileOverlay a tu instancia de GoogleMap
... map.setMapType(GoogleMap.MAP_TYPE_NONE); TileOverlayOptions tileOverlay = new TileOverlayOptions(); tileOverlay.tileProvider(new CustomMapTileProvider()); map.addTileOverlay(tileOverlay).setZIndex(0); ...
- Detección de la posición inicial y final de un 'arrastre' en Android y dibujo de una línea entre ellos
- Org.json.JSONException: Objeto no terminado en el carácter 14