2013-03-27 16 views
6

Voglio utilizzare il metodo zoomToBoundingBox per ingrandire una mappa in un riquadro di delimitazione specifico.
Il metodo non fa altro che visualizzare la mappa sul livello di zoom 0.zoom mapVisualizza su un determinato riquadro di delimitazione su osmdroid

Nel codice sorgente mapView.java ho trovato questo:

/** * zoom della mappa per racchiudere il rettangolo di selezione specificato , il più vicino possibile. * deve essere chiamata dopo layout di visualizzazione è completa, o le dimensioni dello schermo non sono noti, e * sarà sempre lo zoom al centro del livello di zoom 0. * Suggerimento: Controllare getScreenRect (null) .getHeight()> 0 */

Ho controllato getScreenRect(null).getHeight() > 0 e mi dà il falso.

Come si completa il layout di visualizzazione a livello di codice?
Cosa posso fare in modo che il suddetto predicato mi dia la verità?

risposta

2

Ho avuto lo stesso problema. L'ho risolto chiamando la chiamata a zoomToBoundingBox() alla fine del metodo onLayout().

Ho una mia sottoclasse di MapView che uso per isolarmi dalla scelta della libreria di mappe. Questa classe ha uno stile di interfaccia clearPoints/addPoint/layoutPoints. All'interno del metodo layoutPoints() creo la sovrapposizione a oggetti posizionata dall'insieme di punti e creo il riquadro di delimitazione che è archiviato in un metodo di istanza della classe.

public class MyMapView extends MapView { 

// The bounding box around all map points 
// Used to determine the correct zoom level to show everything 
private int minLat = Integer.MAX_VALUE; 
private int minLon = Integer.MAX_VALUE; 
private int maxLat = Integer.MIN_VALUE; 
private int maxLon = Integer.MIN_VALUE; 

private BoundingBoxE6 boundingBox; 

mio onLayout() Azionamento ha:

/* (non-Javadoc) 
* @see org.osmdroid.views.MapView#onLayout(boolean, int, int, int, int) 
*/ 
@Override 
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { 
    super.onLayout(arg0, arg1, arg2, arg3, arg4); 

    // Now that we have laid out the map view, 
    // zoom to any bounding box 
    if (this.boundingBox != null) { 
     this.zoomToBoundingBox(this.boundingBox); 
    } 
} 

io non sono sicuro se questo è il modo migliore di farlo, ma sembra funzionare per me (tranne che lo zoom sembra essere un po 'troppo lontano, ma questo è un altro problema per un'altra volta).

+0

provato, ma non è possibile creare la vista con MyMapView mapView = (MapView) findViewById (R.id.mapview); – thanasio2

+0

ha qualche impatto sul file layout.xml o sul modo in cui crei la vista? se faccio: mapView = (MyMapView) findViewById (R.id.mapview); si rifiuta di eseguire il cast e si blocca ... !!! – thanasio2

+0

Creo la vista mappa (in realtà tutte le mie viste) a livello di codice. Penso che ci sia un modo per definire "MyMapView" con i costruttori giusti in modo che l'IDE possa quindi creare un MyMapView all'interno di XML. Ma questo è da fosco "quando ho iniziato su Android" leggendo molti anni fa. – Colin

Problemi correlati