我正在尝试学习android,并使用新的googlemaps v2 api玩应用程序。
我有几个菜单项,一个缩放到当前位置,一个最终会缩放到另一个位置。第一个(下面的代码中的show_horizon)使地图旋转,第二个将地图设置为静态,屏幕顶部为北。
我已将它们设置为长时间延迟6秒,但show_horizon()似乎忽略了速度设置,而show_iss()则尊重它。
另外,一旦处于旋转模式,如果我滚动地图,触发器show_horizon()现在将尊重速度设置。
所以当我从非旋转切换到旋转时似乎只忽略代码,但是当我走另一条路时它会尊重它。我试图在切换时停止监听器以防万一中断摄像机动画,但它没有任何区别?
欢迎任何线索或想法。
感谢
这是代码。
我有一个传感器监听器如下所示:
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);
}
}
答案 0 :(得分:18)
经过多次试验和错误,这对我有用:
public void openMarker(Marker marker) {
marker.showInfoWindow();
CameraUpdate center = CameraUpdateFactory.newLatLng(marker.getPosition());
mMap.animateCamera(center, 400, null);
}
当然,mMap是我的Google地图对象。
mMap = ((SupportMapFragment)(getFragmentManager().findFragmentById(R.id.googleMap))).getMap();