TL; DR:我想创建一个视图,以响应Google Maps API中地图的移动。谷歌地图API中是否有一种方法来检测相机是否已完成移动?/有没有办法检测相机是否静止?
我制作的应用程序设计与应用程序Uber非常相似。在Uber中,屏幕中央有一个小的弹出气泡,当地图处于运动状态时会消失,当静止时它会回来。我想复制那个效果。
以下是我的应用中的气泡。它在xml布局中定义,该布局存在于带有地图的frameview中。
我有动画功能,我只需要一种方法来感知地图的运动。
我找到了一种方法,通过分配CameraUpdateCallback来查看相机的programatic movement是否已完成,但我找不到将这些回调分配给相机的正常,用户启动的移动的方法。
替代方案是创建一个线程,每隔X毫秒检查一次摄像机的位置,当地图位置没有变化时在气泡中消失,但这对我来说感觉非常“hacky”,似乎需要额外的处理这不应该是必要的。
Google Map API中是否有内置功能来检测相机是否已完成移动?/有没有办法检测相机是否静止?
答案 0 :(得分:1)
创建一个将执行检查的方法:
private void checkForMapAnimationPosition() {
if (mPreviousCenter==null || (mPreviousCenter != null && !mPreviousCenter.equals(mCurrentCenter))) {
mPreviousCenter = mCurrentCenter;
mHandler.postDelayed(mMapCheckerRunnable, 30);
}
else {
mMapAnimationListener.onMapStoppedAnimating();
}
}
创建将执行检查的 if (mPreviousCenter==null || (mPreviousCenter != null && !mPreviousCenter.equals(mCurrentCenter))) {
mPreviousCenter = mCurrentCenter;
mHandler.postDelayed(mMapCheckerRunnable, 30);
}
else {
mMapAnimationListener.onMapStoppedAnimating();
}
}
Runnable
private Runnable mMapCheckerRunnable = new Runnable() {
@Override
public void run() {
checkForMapAnimationPosition();
}
};
设置相机更改后的监听器,并在GoogleMap
方法中执行此操作:
onCameraChange()
请注意,即使放大/缩小,也会调用
@Override
public void onCameraChange(CameraPosition current) {
mCurrentCenter = current.target;
mHandler.removeCallbacks(mMapCheckerRunnable);
checkForMapAnimationPosition();
}
。您可以通过保留上一个缩放级别并将其与onCameraChange
的当前缩放级别进行比较来省略此情况。
答案 1 :(得分:1)
回答为时已晚,但可能会帮助另一个人 只需使用
googleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
Log.d(TAG, "onCameraIdle: ");
}
});