2012-12-23 13 views
6

Sto cercando di imparare Android e giocare con un'app usando la nuova v2 api googlemaps.mappe api2 animateCamera problemi di velocità

Ho un paio di voci di menu, una zooma alla posizione corrente, una alla fine lo zoom in un'altra posizione. Il primo (show_horizon nel codice qui sotto) consente alla mappa di ruotare, il secondo imposta la mappa in modo statico con il nord nella parte superiore dello schermo.

Ho impostato entrambi per avere lunghi ritardi di 6 secondi, ma lo show_horizon() sembra ignorare l'impostazione della velocità, mentre lo show_iss() lo rispetta.

Inoltre, una volta in modalità di rotazione, se si scorre sulla mappa e il trigger show_horizon() ora rispetterà l'impostazione della velocità.

Quindi sembra ignorare il codice solo quando si passa da non rotazione a rotazione, ma lo rispetta quando vado dall'altra parte. Ho provato a fermare l'ascoltatore quando si inseriva nel caso in cui interrompesse l'animazione della videocamera, ma non ha fatto alcuna differenza?

Eventuali indizi o idee benvenuto.

grazie

Ecco il codice.

Ho un ascoltatore sensore ricevendo il cuscinetto del telefono in questo modo:

private SensorEventListener get_bearing = new SensorEventListener() { 
    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    } 
    @Override 
    public void onSensorChanged(SensorEvent event) { 
     float azimuth = event.values[0]; 
     set_bearing(azimuth); 
    } 
    }; 

private void set_bearing(float azimuth) { 
    if (!rotate_view) { 
     bearing = 0; 
    } else { 
     if (bearing != Math.round(azimuth)) { 
      bearing = Math.round(azimuth); 
      update_map(); 
     } 
    } 
} 

e un paio di metodi per modificare le mappe per la rotazione o no:

private void show_horizon() { 
    current_pos = new LatLng(gps.getLatitude(), gps.getLongitude()); 
    rotate_view = true; 
    tilt = 30; 
    zoom_level = 14; 
    stop_listener(); 
    update_map(6000); 
    start_listener(); 
} 

private void show_iss() { 
    rotate_view = false; 
    bearing = 0; 
    tilt = 0; 
update_map(6000);  
} 

e il mio codice per aggiornare la posizione della telecamera:

private void update_map() {update_map(100);} 
private void update_map(int speed) { 
    if (current_pos != null) { 
     CameraPosition cameraPosition = new CameraPosition.Builder() 
     .target(current_pos)  
     .zoom(zoom_level)    
     .bearing(bearing)     
     .tilt(tilt)     
     .build();    
     gmap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition), speed, null); 
    } 
} 

risposta

13

Questo ha funzionato per me, dopo molte prove ed errori:

public void openMarker(Marker marker) { 

    marker.showInfoWindow(); 
    CameraUpdate center = CameraUpdateFactory.newLatLng(marker.getPosition()); 
    mMap.animateCamera(center, 400, null); 
} 

mMap è il mio oggetto della mappa Google, ovviamente.

mMap = ((SupportMapFragment)(getFragmentManager().findFragmentById(R.id.googleMap))).ge‌​tMap(); 
Problemi correlati