2012-12-23 13 views
6

Próbuję nauczyć się Androida i grać z aplikacją za pomocą nowego api googlemaps v2.map api2 animateCamera speed problems

Mam kilka pozycji menu, jeden przybliża do bieżącej lokalizacji, a jeden z nich zostanie powiększony w inne miejsce. Pierwszy (show_horizon w kodzie poniżej) umożliwia obrót mapy, drugi ustawia mapę na statyczną z północą u góry ekranu.

Ustawiłem je tak, aby miały długie 6-sekundowe opóźnienia, ale show_horizon() wydaje się zignorować ustawienie prędkości, podczas gdy show_iss() respektuje to.

również, raz w trybie obracania, jeśli przewińę o mapę i wyzwalacz show_horizon(), będzie on teraz przestrzegał ustawienia prędkości.

Wygląda więc na to, że ignoruję kod tylko wtedy, gdy przełączam się z nieobrotowego na obrotowy, ale szanuję go, gdy przechodzę w drugą stronę. Próbowałem zatrzymać słuchacza podczas przełączania w przypadku, gdy przerwał on animację kamery, ale nie robiło to żadnej różnicy?

Wszelkie wskazówki i pomysły są mile widziane.

dziękuję

Oto kod.

Mam słuchacza czujnika dostaniem łożysko telefonu tak:

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(); 
     } 
    } 
} 

i kilka sposobów na zmianę mapy do obracania lub nie:

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);  
} 

i mój kod do aktualizacji pozycja kamery:

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); 
    } 
} 

Odpowiedz

13

To zadziałało dla mnie po wielu próbach i błędach:

public void openMarker(Marker marker) { 

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

mMap to oczywiście mój obiekt mapy Google.

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