私はアンドロイドを学ぼうとしていて、新しいgooglemapsv2apiを使ってアプリで遊んでいます。
メニュー項目がいくつかあります。1つは現在の場所にズームし、もう1つは最終的に別の場所にズームします。1つ目(以下のコードではshow_horizon)を使用すると、マップを回転できます。2つ目は、マップを静的に設定し、画面の上部を北に設定します。
両方に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);
}
}