Перемещать или анимировать карту и маркер синхронно - PullRequest
0 голосов
/ 09 марта 2019

У меня есть список с кучей LatLng. Мне нужно анимировать маркер из одной позиции в другую, пока не закончится список (конечная точка).

Я использую интерполятор (что-то вроде этой реализации из @ CommonsWare введите описание ссылки здесь ), чтобы анимировать маркер от позиции к другой. В то же время я также создаю полилинию с сгенерированными точками.

С учетом вышесказанного у меня есть рабочее решение. Если для карты задано максимальное увеличение (21f) и даже если интерполятор выдает результаты со скоростью, превышающей 16ms, добавление ломаной линии и маркера в новой позиции не влияет на интерфейс пользователя, то есть на как могут видеть мои глаза, это очень гладко. Конечно, в какой-то момент маркер выходит за пределы экрана, и мне приходится перемещать карту пальцем, чтобы отслеживать движение маркера и полилинии.

Теперь я хочу, чтобы маркер оставался всегда в центре экрана, поэтому карта должна двигаться.

Я пытался использовать map.moveCamera и map.animateCamera, но иногда интерфейс становился немного вялым. Я вижу, что маркер движется не так плавно, как раньше. Это использует map.moveCamera, потому что с map.animateCamera у меня даже худшие результаты.

В функции, которую ObjectAnimator вызывает каждый раз, когда она интерполирует точку, я делаю это:

public void onNewPosition(LatLng newPosition){
    marker.setPostion(newPosition);
    map.moveCamera(marker.getPosition())
}

Если я оберну вышеупомянутое в if состоянии, чтобы проверить, больше ли время, прошедшее с предыдущего вызова на этот, чем 16ms, у меня все еще есть некоторый вялый пользовательский интерфейс.

Я определил проблему в движении карты. Не знаю, если дело в том, что пользовательский интерфейс не может визуализировать движение карты и движение маркера одновременно, таким образом, кажется, что иногда маркер перемещается, а карта - нет, а в других случаях наоборот (не не знаю, прав я или нет)

Любая идея о том, как я могу одновременно переместить карту и маркер или другое решение, которое удовлетворяет моим потребностям, то есть переместить маркер и карту так, чтобы пользователь воспринял, что маркер движется, но остается в центр экрана, в то время как карта ниже выполняет требуемое движение?

Спасибо.

1 Ответ

2 голосов
/ 09 марта 2019

Не могли бы вы добавить карту в два прокручиваемых объекта: HorizontalScrollView и VerticalScrollView, чтобы вы могли аппроксимировать свое движение вертикальной и горизонтальной прокруткой? Используйте видовой экран для вида карты, который охватывает конечные точки вашего путешествия. Прокрутите представление карты при изменении фокальной позиции вместо вызова moveCamera. Идея состоит в том, чтобы перенести перерисовку на графический движок (что должно быть очень хорошо) вместо API карты. [Я использовал похожую архитектуру просмотра для прокрутки расписания поездов, и она работала очень хорошо.]

...