11

私はアンドロイドを学ぼうとしていて、新しいgooglemapsv2apiを使ってアプリで遊んでいます。

メニュー項目がいくつかあります。1つは現在の場所にズームし、もう1つは最終的に別の場所にズームします。1つ目(以下のコードではshow_horizo​​n)を使用すると、マップを回転できます。2つ目は、マップを静的に設定し、画面の上部を北に設定します。

両方に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);
    }
}
4

1 に答える 1

27

多くの試行錯誤の後、これは私にとってはうまくいきました:

 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))).ge‌​tMap();
于 2013-03-13T04:07:51.803 に答える