Android アプリケーションで高德地图(Amap)SDK を使用する際、ユーザーによる地図のズーム操作を検知し、それに応じてマーカーやレイヤーを動的に更新したいケースはよくあります。この記事では、OnCameraChangeListener を活用してズームイベントを監視する実装方法を解説します。
高德地图 SDK のセットアップ
まず、モジュールレベルの build.gradle に以下の依存関係を追加します:
dependencies {
implementation 'com.amap.api:3dmap:9.7.0' // 実際の最新バージョンに置き換えてください
}
次に、AndroidManifest.xml に必要な権限と API キーを設定します:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="YOUR_AMAP_API_KEY" />
</application>
ズームイベントの監視
地図のカメラ変更(パン・ズーム・傾きなど)を監視するには、AMap オブジェクトに OnCameraChangeListener を設定します。ズームレベルの変化は、カメラ操作が完了したタイミングで取得するのが一般的です。
aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
// カメラ移動中のコールバック(通常は無視)
}
@Override
public void onCameraChangeFinish(CameraPosition position) {
float currentZoom = position.zoom;
adjustMapContent(currentZoom);
}
});
onCameraChangeFinish メソッド内で現在のズームレベル(zoom)を取得し、必要に応じて地図上の要素を更新します。
実装例:ズームに応じたマーカー表示制御
以下は、ズームレベルに応じてマーカーの表示・非表示を切り替える例です:
private void adjustMapContent(float zoomLevel) {
if (zoomLevel >= 12.0f) {
showAllMarkers();
} else {
hideDenseMarkers();
}
}
private void showAllMarkers() {
// 全てのマーカーを表示
}
private void hideDenseMarkers() {
// 密集しているマーカーを非表示にするなど
}
このようにすることで、ユーザー体験を損なわずに情報密度を適切にコントロールできます。