确定相机更改事件是程序化的
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
。我发现我不能依赖这个,因为 cameraPosition
和 lastClickedMarker
坐标总是会有点不同,即使真的用 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
}
}
我想确定相机更改事件是否由用户发起。 (我必须根据此采取不同的行动)。所以如果用户用手指平移相机,我必须关闭 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
。我发现我不能依赖这个,因为 cameraPosition
和 lastClickedMarker
坐标总是会有点不同,即使真的用 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
}
}