今日、古いコードを振り返ると、OnCameraChangeListener()が非推奨になっていることがわかりました。
私のこのコードを修正する方法を理解するのは難しいと感じています:
mGoogleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
// Cleaning all the markers.
if (mGoogleMap != null) {
mGoogleMap.clear();
}
mPosition = cameraPosition.target;
mZoom = cameraPosition.zoom;
if (mTimerIsRunning) {
mDragTimer.cancel();
}
mDragTimer.start();
mTimerIsRunning = true;
}
});
新しいリスナー(別名OnCameraMoveListener())メソッドonCameraMove()は'CameraPosition cameraPosition入力変数がないので、かなり迷ってしまいました。古いコードをリサイクルする方法はありますか?
ここ はいくつかの参照です。
play-services-maps 9.4.0バージョンのAPI では、GoogleMap.OnCameraChangeListener()
を3つのカメラリスナーに置き換えました:
GoogleMap.OnCameraMoveStartedListener
GoogleMap.OnCameraMoveListener
GoogleMap.OnCameraIdleListener
コードに基づいて、次のようにGoogleMap.OnCameraIdleListener
とGoogleMap.OnCameraMoveStartedListener
を使用する必要があると思います。
mGoogleMap.setOnCameraMoveStartedListener(new GoogleMap.OnCameraMoveStartedListener() {
@Override
public void onCameraMoveStarted(int i) {
mDragTimer.start();
mTimerIsRunning = true;
}
});
mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
// Cleaning all the markers.
if (mGoogleMap != null) {
mGoogleMap.clear();
}
mPosition = mGoogleMap.getCameraPosition().target;
mZoom = mGoogleMap.getCameraPosition().zoom;
if (mTimerIsRunning) {
mDragTimer.cancel();
}
}
});
カメラ変更イベント の新しいモデルでは、CameraPosition
がリスナーに渡されないことが正しいです。
代わりに、特に必要なとき(つまり、移動が開始、移動中、キャンセル、または終了/アイドル状態に戻ったとき)に getCameraPosition() を使用する必要があります。
Kotlinで@ Barrak90の回答を更新しています。 OnCameraChangeListener()は非推奨になったため、次を使用できます。
mMap.setOnCameraMoveStartedListener { reason: Int ->
when (reason) {
GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {
Log.d("camera", "The user gestured on the map.")
}
GoogleMap.OnCameraMoveStartedListener
.REASON_API_ANIMATION -> {
Log.d("camera", "The user tapped something on the map.")
}
GoogleMap.OnCameraMoveStartedListener
.REASON_DEVELOPER_ANIMATION -> {
Log.d("camera", "The app moved the camera.")
}
}
}
mMap.setOnCameraIdleListener {
val midLatLng: LatLng = mMap.cameraPosition.target//map's center position latitude & longitude
}
mMap.setOnCameraMoveStartedListener {
}
ここでmMap
はGoogleMap
オブジェクトで、内部で呼び出しています
override fun onMapReady(map: GoogleMap?) {
mMap = map as GoogleMap
//your stuff
}
新しく導入された4つのカメラリスナー(OnCameraIdleListener
、OnCameraMoveListener
、OnCameraMoveStartedListener
、OnCameraMoveCanceledListener
)を使用することをお勧めしますが、setOnCameraChangeListener
特定のバージョンのAndroid-maps-utils
を使用します(以下で指定)
'com.google.maps.Android:android-maps-utils:0.4.3'をコンパイルします
モジュールレベルのgradleファイル。
mGoogleMap.setOnCameraChangeListenerの代わりにmGoogleMap.setOnCameraIdleListenerを使用します。
mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
mPosition = mGoogleMap.getCameraPosition().target;
mZoom = mGoogleMap.getCameraPosition().zoom;
double lat = mGoogleMap.getCameraPosition().target.latitude;
double lng = mGoogleMap.getCameraPosition().target.longitude;
}
});