确定相机更改事件是程序化的

Determine camera change event was programatic

我想确定相机更改事件是否由用户发起。 (我必须根据此采取不同的行动)。所以如果用户用手指平移相机,我必须关闭 sg,但如果我用 API 移动相机,我不会。

目前我无法确定它是否是用户事件,在我的 OnCameraChangeListener 中,因为 onCameraChange(CameraPosition var1) 方法不提供任何类型的相关信息。

我还尝试保存我以编程方式设置动画的最后一个标记位置,并在侦听器方法中检查:

map.setOnCameraChangeListener(new GoogelMap.onCameraChangeListener {
    public void onCameraChange(CameraPosition position) {
            if (!cameraPosition.target.equals(lastClickedMarker)) {
                // this is a user event
            }
}

我将 lastClickedMarker 设置为 OnMarkerClickListener。我发现我不能依赖这个,因为 cameraPositionlastClickedMarker 坐标总是会有点不同,即使真的用 animateCamera().

以编程方式为该标记设置动画也是如此

有什么办法可以解决吗?

您可以在以编程方式更改相机之前设置一个布尔值,并检查它是否在 onCameraChange 方法中设置(和取消设置)。

像这样:

// Moving programmatically
cameraMovedProgrammatically = true;
map.animateCamera(cameraUpdate);

并检查它:

public void onCameraChange(CameraPosition position) {
    if (cameraMovedProgrammatically) {
        // this is not a user event
        cameraMovedProgrammatically = false;
    } else {
        // this is a user event
    }
}