Я пытаюсь обновить свою ориентацию на основе TYPE_ROTATION_VECTOR
, и она работает нормально. Моя проблема в том, что у меня есть getLocationUpdates()
функция с функцией animateCamera, у меня также есть onSensorChanged()
с той же функцией. Проблема заключается в том, что эти два помехи и функция getLocationUpdates()
animateCamera всегда подавляются одной и той же функцией в OnSensorChanged()
. Если есть способ манипулировать одним и тем же объектом CameraPosition так, чтобы getLocationUpdates()
обновлял только .target, а onSensorChanged обновлял только .bearing, что решило бы все мои проблемы, но я бы ничего не нашел .. .
Итак, я пришел сюда за помощью.
Функция onSensorChanged
override fun onSensorChanged(event: SensorEvent?) {
if(event!!.sensor.type == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(
mRotationMatrix, event.values)
SensorManager.getOrientation(mRotationMatrix, orientation)
bearing = (Math.toDegrees(orientation[0].toDouble()) + mDeclination).toFloat()
animate(bearing)
}
}
Функция GetLocationUpdates
private fun getLocationUpdates()
{ isAnimationFinished=false
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult?) {
locationResult ?: return
if (locationResult.locations.isNotEmpty()) {
marker.remove()
val location =
locationResult.lastLocation
currentLatLng = LatLng(location.latitude, location.longitude)
field = GeomagneticField(
location!!.latitude.toFloat(),
location.longitude.toFloat(),
location.altitude.toFloat(),
System.currentTimeMillis()
)
mDeclination = field.declination
animate(bearing)
marker = map.addMarker(markerOptionsVisible.position(currentLatLng))
}
}
}
}
функция анимирования
private fun animate(bearing: Float) {
val oldPos = cameraPosition
if (oldPos.target != currentLatLng)
{
val pos = CameraPosition.builder(oldPos)
.target(currentLatLng)
.bearing(bearing)
.build()
map.moveCamera(newCameraPosition(pos))
}
else
{
val pos = CameraPosition.builder(oldPos)
.bearing(bearing)
.build()
map.animateCamera(newCameraPosition(pos), 1, null)
}
}
Я испробовал сотню идей, и ничто не помогло в том, что местоположение плавно анимируется при вращении.
Я тестирую на Huawei P30 Pro, поэтому проблем с оборудованием не должно быть.