android - OnCameraChangeListener() está en desuso
deprecated (5)
Hoy, mirando hacia atrás a mi antiguo código, descubrí que OnCameraChangeListener () ahora está en desuso.
Me resulta difícil entender cómo arreglar este código mío:
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;
}
});
El nuevo método de escucha (también conocido como OnCameraMoveListener () ) onCameraMove () no tiene una variable de entrada CameraPosition cameraPosition , así que estoy bastante perdido: ¿hay alguna forma de reciclar mi código anterior?
Here hay algunas referencias.
Acabo de actualizar la respuesta de @ Barrak90 en Kotlin. Como OnCameraChangeListener () está en desuso ahora, usted puede usar
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 {
}
Aquí mMap
es el objeto GoogleMap
y lo llamo dentro.
override fun onMapReady(map: GoogleMap?) {
mMap = map as GoogleMap
//your stuff
}
En el nuevo modelo para eventos de cambio de cámara , es correcto que la CameraPosition
la CameraPosition
no se transfiera al oyente.
En su lugar, solo debe usar getCameraPosition() siempre que lo necesite específicamente (es decir, cuando comienza el movimiento, a mitad de la jugada, cancelado o finalizado / regresado al estado inactivo).
En la versión 9.4.0 de la API de play-services-maps , reemplazaron GoogleMap.OnCameraChangeListener()
con tres oyentes de cámara:
-
GoogleMap.OnCameraMoveStartedListener
-
GoogleMap.OnCameraMoveListener
-
GoogleMap.OnCameraIdleListener
Según su código, creo que necesita usar GoogleMap.OnCameraIdleListener
y GoogleMap.OnCameraMoveStartedListener
esta manera:
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();
}
}
});
Es recomendable utilizar cuatro escuchas de cámara recién introducidas ( OnCameraIdleListener
, OnCameraMoveListener
, OnCameraMoveStartedListener
, OnCameraMoveCanceledListener
), pero si todavía desea usar setOnCameraChangeListener
use una versión específica de android-maps-utils
(Se muestra a continuación)
compilar ''com.google.maps.android:android-maps-utils:0.4.3''
en su archivo de nivel de módulo gradle.
use mGoogleMap.setOnCameraIdleListener en lugar 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;
}
});