有没有办法判断谷歌地图片段中的相机何时停止移动?

时间:2014-01-20 19:06:32

标签: android google-maps-android-api-2

TL; DR:我想创建一个视图,以响应Google Maps API中地图的移动。谷歌地图API中是否有一种方法来检测相机是否已完成移动?/有没有办法检测相机是否静止?

我制作的应用程序设计与应用程序Uber非常相似。在Uber中,屏幕中央有一个小的弹出气泡,当地图处于运动状态时会消失,当静止时它会回来。我想复制那个效果。

以下是我的应用中的气泡。它在xml布局中定义,该布局存在于带有地图的frameview中。

enter image description here

我有动画功能,我只需要一种方法来感知地图的运动。

我找到了一种方法,通过分配CameraUpdateCallback来查看相机的programatic movement是否已完成,但我找不到将这些回调分配给相机的正常,用户启动的移动的方法。

替代方案是创建一个线程,每隔X毫秒检查一次摄像机的位置,当地图位置没有变化时在气泡中消失,但这对我来说感觉非常“hacky”,似乎需要额外的处理这不应该是必要的。

Google Map API中是否有内置功能来检测相机是否已完成移动?/有没有办法检测相机是否静止?

2 个答案:

答案 0 :(得分:1)

  1. 创建一个将执行检查的方法:

    private void checkForMapAnimationPosition() {

            if (mPreviousCenter==null || (mPreviousCenter != null && !mPreviousCenter.equals(mCurrentCenter))) {
                mPreviousCenter = mCurrentCenter;
                mHandler.postDelayed(mMapCheckerRunnable, 30);
            }
            else {
                mMapAnimationListener.onMapStoppedAnimating();
            }
        }
    

  2. 创建将执行检查的 if (mPreviousCenter==null || (mPreviousCenter != null && !mPreviousCenter.equals(mCurrentCenter))) { mPreviousCenter = mCurrentCenter; mHandler.postDelayed(mMapCheckerRunnable, 30); } else { mMapAnimationListener.onMapStoppedAnimating(); } }

    Runnable

  3. private Runnable mMapCheckerRunnable = new Runnable() { @Override public void run() { checkForMapAnimationPosition(); } };设置相机更改后的监听器,并在GoogleMap方法中执行此操作:
  4. 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: ");
        }
 });
相关问题