Aujourd'hui, en regardant mon ancien code, j'ai découvert que OnCameraChangeListener () est désormais obsolète.
J'ai du mal à comprendre comment réparer ce morceau de code:
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;
}
});
La nouvelle méthode d'écoute (alias OnCameraMoveListener ()) onCameraMove () n'a pas de variable d'entrée CameraPosition cameraPosition, je suis donc assez perdu: existe-t-il un moyen de recycler mon ancien code?
Voici sont quelques références.
Dans le nouveau modèle pour camera change events , il est correct que la variable CameraPosition
ne soit pas transmise à l'écouteur.
Au lieu de cela, vous devriez simplement utiliser getCameraPosition () chaque fois que vous en avez spécifiquement besoin (c'est-à-dire lorsque le déplacement commence, est déplacé au milieu, annulé ou terminé/est retourné au repos).
Dans play-services-maps 9.4.0 version de l'API , Ils ont remplacé GoogleMap.OnCameraChangeListener()
par trois écouteurs de caméra:
GoogleMap.OnCameraMoveStartedListener
GoogleMap.OnCameraMoveListener
GoogleMap.OnCameraIdleListener
En fonction de votre code, je pense que vous devez utiliser GoogleMap.OnCameraIdleListener
et GoogleMap.OnCameraMoveStartedListener
comme ceci:
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();
}
}
});
Il est conseillé d’utiliser les quatre nouveaux écouteurs de caméra (OnCameraIdleListener
, OnCameraMoveListener
, OnCameraMoveStartedListener
, OnCameraMoveCanceledListener
), mais si vous voulez toujours utiliser setOnCameraChangeListener
, utilisez une version spécifique de Android-maps-utils
compiler 'com.google.maps.Android:android-maps-utils:0.4.3'
dans votre fichier de niveau de module.
Je suis en train de mettre à jour la réponse de @ Barrak90 dans Kotlin . Comme OnCameraChangeListener () est obsolète maintenant, vous pouvez utiliser
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 {
}
Ici mMap
est un objet GoogleMap
et je l’appelle à l’intérieur
override fun onMapReady(map: GoogleMap?) {
mMap = map as GoogleMap
//your stuff
}
utilisez mGoogleMap.setOnCameraIdleListener au lieu de mGoogleMap.setOnCameraChangeListener .
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;
}
});