3

我正在使用下面的代码来检测用户的缩放,但即使我没有触摸任何东西,它也在循环中。如何检测设备上的人为触摸并检查他是否缩放?我非常感谢任何帮助。在此先感谢。

 googleMap.setOnCameraChangeListener(new OnCameraChangeListener() {

                @Override
                public void onCameraChange(CameraPosition position) {
                    // TODO Auto-generated method stub

                    if (position.zoom < 12 ) {
                        googleMap.animateCamera(CameraUpdateFactory.zoomTo(13));
                        }

                 googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

                    }
                }

              });

    }
4

1 回答 1

2

无限循环是显而易见的。要么您的缩放级别为 20,那么您将始终处于第二个 if 条件。或者您的缩放级别小于 20,那么您将始终处于第三个 if 条件。

我会尝试这样的事情:

boolean changeTriggeredByProgram = false;
googleMap.setOnCameraChangeListener(new OnCameraChangeListener() {

    @Override
    public void onCameraChange(CameraPosition position) {
        if (changeTriggerByProgram) {
            changeTriggeredByProgram = false;
            return;
        }
        /* Check, whether you want to adapt the position by program, 
         * and if so, do the following: */
        changeTriggeredByProgram = true;
        googleMap.animateCamera(newPosition, new CancelableCallback() {
            @Override
            public void onFinish() {
            }
            @Override
            public void onCancel() {
                changeTriggeredByProgram = false;
            }
        };
    }
}

不保证这行得通。我使用的解决方案略有不同,因为我的问题略有不同。

于 2013-10-12T11:47:53.700 回答