【问题标题】:GoogleMaps CancelableCallback will not change my Camera angle and position. What am i doing wrong?GoogleMaps CancelableCallback 不会改变我的相机角度和位置。我究竟做错了什么?
【发布时间】:2020-12-18 15:45:06
【问题描述】:

我添加了放置在我的 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 但实际上并没有用它做任何事情。
  • 谢谢@Andy,我已经按照正确的建议添加了动画相机调用。但是仍然没有调用回调我已经添加了修改后的代码,我希望有人能提供帮助。我已多次阅读文档,但不明白我缺少什么?谢谢。
  • 另一个问题:当您最初调用animateCamera 时,您会立即设置routeAnimationCancelableCallback - 这意味着最初的animateCamera 对您的回调一无所知。只需将初始的animateCamera 移动到设置routeAnimationCancelableCallback 后即可。
  • @Andy 谢谢你解决了这个问题,这就是答案。动画现在流动,第一个动画调用必须在回调创建后进行。如果您想将其发布为答案,我可以标记它。如果没有,我以后会自己做。谢谢安迪。

标签: java android google-maps


【解决方案1】:

考虑到第二个代码贴,在routeAnimationCancelableCallback的设置之后,简单的把初始调用移到animateCamera。这还包括在回调中调用 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);

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 1970-01-01
    • 2016-07-18
    • 2019-05-05
    • 1970-01-01
    • 2021-09-22
    • 2019-12-23
    • 2016-12-30
    • 2014-06-15
    相关资源
    最近更新 更多