OnSensorChanged с помехами FusedLocationClient AnimateCamera - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь обновить свою ориентацию на основе 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, поэтому проблем с оборудованием не должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...