GoogleMaps CancelableCallback не изменит угол и положение моей камеры. Что я делаю не так?

Я добавил позиции камеры и анимацию обратного вызова, которые помещены в мой onMapReady().

CameraPosition cameraPosition =
               new CameraPosition.Builder()
                       .target(new LatLng(currentRoute.locations.get(1).getLatitude(),
                               currentRoute.locations.get(1).getLongitude()))
                       .tilt(60)
                       .bearing((float)currentRoute.getRouteEdges().getFirst().getHeading(currentRoute.getStart(), currentRoute.getFinish())-40)
                       .zoom(20)
                       .build();

       CameraUpdate update = (CameraUpdateFactory.newCameraPosition(cameraPosition));

       turnByTurnMap.animateCamera(update, new GoogleMap.CancelableCallback() {
           @Override
           public void onFinish() {
               if (currentPosition<currentRoute.locations.size()-1){
                   float bearing = HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition).getLatitude(),
                           currentRoute.locations.get(currentPosition).getLongitude()).bearingTo(HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition+1).getLatitude(),
  currentRoute.locations.get(currentPosition+1).getLongitude()));
                   CameraPosition cameraPosition =
                           new CameraPosition.Builder()
                                   .target(new LatLng(currentRoute.locations.get(currentPosition).getLatitude(),
                                           currentRoute.locations.get(currentPosition).getLongitude()))
                                   .tilt(60)
                                   .bearing(bearing)
                                   .zoom(20)
                                   .build();
                   currentPosition++;
               }
           }

           @Override
           public void onCancel() {

           }
       });

Почему камера не двигается по локациям. В массиве местоположений есть 8 местоположений. Почему камера не обновляется?

Обновлено: Я добавил animateCamera в обратный вызов, однако обратный вызов никогда не вызывается. Я повторно опубликовал текущую реализацию, я зарегистрировался внутри обратного вызова, и он никогда не вызывается?

CameraPosition cameraPosition =
                new CameraPosition.Builder()
                        .target(new LatLng(currentRoute.locations.get(1).getLatitude(),
                                currentRoute.locations.get(1).getLongitude()))
                        .tilt(60)
                        .bearing((float)currentRoute.getRouteEdges().getFirst().getHeading(currentRoute.getStart(), currentRoute.getFinish())-40)
                        .zoom(20)
                        .build();

        CameraUpdate update = (CameraUpdateFactory.newCameraPosition(cameraPosition));

        turnByTurnMap.animateCamera(update,
                3000,
                routeAnimationCancelableCallback);

        routeAnimationCancelableCallback = new GoogleMap.CancelableCallback() {

            @Override
            public void onCancel() {

            }
            @Override
            public void onFinish() {
                Log.d(TAG, "onFinish: here");
                if (currentPosition<currentRoute.locations.size()-1){
                    float bearing = HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition+1).getLatitude(),
                            currentRoute.locations.get(currentPosition+1).getLongitude()).bearingTo(HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition+1).getLatitude(),
                            currentRoute.locations.get(currentPosition+2).getLongitude()));
                    CameraPosition cameraPosition =
                            new CameraPosition.Builder()
                                    .target(new LatLng(currentRoute.locations.get(currentPosition+1).getLatitude(),
                                            currentRoute.locations.get(currentPosition+1).getLongitude()))
                                    .tilt(60)
                                    .bearing(bearing)
                                    .zoom(10)
                                    .build();
                    CameraUpdate update = (CameraUpdateFactory.newCameraPosition(cameraPosition));

                    turnByTurnMap.animateCamera(update,
                            3000,
                            routeAnimationCancelableCallback);
                    currentPosition++;
                }


            }
        };

В своем onFinish вы строите cameraPosition, но на самом деле ничего с ним не делаете.

user2711811 20.12.2020 02:52

Спасибо @Andy, я добавил анимацию вызова камеры, как было правильно предложено. Однако обратный вызов по-прежнему не вызывается, я добавил исправленный код, надеюсь, кто-то может помочь. Я много раз читал документацию и не понимаю, чего мне не хватает? Спасибо.

ProjH 20.12.2020 13:05

Еще одна проблема: когда вы сначала вызываете animateCamera, вы сразу же устанавливаете routeAnimationCancelableCallback - это означает, что первоначальный animateCamera ничего не знает о вашем обратном вызове. Просто переместите начальную animateCamera после установки routeAnimationCancelableCallback.

user2711811 20.12.2020 17:31

@Энди Спасибо, что решил проблему, это был ответ. Анимация теперь течет, первый вызов анимации должен был произойти после создания обратного вызова. Если вы хотите опубликовать это как ответ, я могу отметить его. Если нет, я сделаю это сам позже. Спасибо, Энди.

ProjH 20.12.2020 18:47
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
0
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Принимая во внимание второй пост кода, просто переместите начальный вызов на animateCamera после установки routeAnimationCancelableCallback. Это также включает первоначальное исправление для вызова animateCamera в обратном вызове.

    // initial call to animateCamera was here...


    routeAnimationCancelableCallback = new GoogleMap.CancelableCallback() {

        @Override
        public void onCancel() {

        }
        @Override
        public void onFinish() {
            Log.d(TAG, "onFinish: here");
            if (currentPosition<currentRoute.locations.size()-1){
                float bearing = HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition+1).getLatitude(),
                        currentRoute.locations.get(currentPosition+1).getLongitude()).bearingTo(HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition+1).getLatitude(),
                        currentRoute.locations.get(currentPosition+2).getLongitude()));
                CameraPosition cameraPosition =
                        new CameraPosition.Builder()
                                .target(new LatLng(currentRoute.locations.get(currentPosition+1).getLatitude(),
                                        currentRoute.locations.get(currentPosition+1).getLongitude()))
                                .tilt(60)
                                .bearing(bearing)
                                .zoom(10)
                                .build();
                CameraUpdate update = (CameraUpdateFactory.newCameraPosition(cameraPosition));

                turnByTurnMap.animateCamera(update,
                        3000,
                        routeAnimationCancelableCallback);
                currentPosition++;
            }


        }
    };


    // and moved to here...

    turnByTurnMap.animateCamera(update,
            3000,
            routeAnimationCancelableCallback);

Другие вопросы по теме