2012-12-23 19 views
6

我想學習android,並使用新的googlemaps v2 api與應用程序一起玩。地圖api2 animateCamera速度問題

我有幾個菜單項,其中一個放大到當前位置,一個最終會放大到另一個位置。第一個(show_horizo​​n代碼如下)使地圖旋轉,第二個將地圖設置爲靜態,屏幕頂部爲北。

我已經設置它們都有6秒的延遲,但show_horizo​​n()似乎忽略了速度設置,而show_iss()尊重它。

此外,一旦在旋轉模式下,如果我滾動有關地圖,並觸發show_horizo​​n()它現在將尊重速度設置。

因此,當我從非旋轉切換到旋轉時,它似乎只忽略代碼,但當我走另一條路時,它會尊重它。我試過在中斷相機動畫的情況下切換時停止偵聽器,但它沒有區別?

歡迎任何線索或想法。

謝謝

這是代碼。

我有一個傳感器監聽器獲取手機的軸承是這樣的:

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

和幾個方法改變映射到旋轉或不:

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

和我的代碼更新相機位置:

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

回答

13

這對我來說,經過很多反覆試驗:

public void openMarker(Marker marker) { 

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

mMap是我的谷歌地圖對象,當然。

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