关于android上谷歌地图的缩放事件

Bja*_*sen 39 java events android google-maps zoom

我们正在构建一个使用google maps api for android的应用程序.

我有我的MapController和MapView,我启用了内置的缩放控件:

mapView.setBuiltInZoomControls(true);
Run Code Online (Sandbox Code Playgroud)

我现在想要在用户实际放大地图时获得一个事件,我该怎么做呢?我找不到这样的事件或任何我可以检测到缩放级别变化的一般事件.

更新

不推荐使用mapView.getZoomControls().文档建议使用mapView.setBuiltInZoomControls(bool).这没关系,但我根本无法弄清楚如何对内置缩放控件中的事件采取行动.

tar*_*lop 39

使用Google Maps Android API v2,您可以使用GoogleMap.OnCameraChangeListener,如下所示:

mMap.setOnCameraChangeListener(new OnCameraChangeListener() {

    private float currentZoom = -1;

    @Override
    public void onCameraChange(CameraPosition pos) {
        if (pos.zoom != currentZoom){
            currentZoom = pos.zoom;
            // do you action here
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 现在不推荐使用`setOnCameraChangeListener()` (7认同)

Kur*_*rru 25

您可以实现自己的缩放值的基本"轮询",以检测何时使用Android 处理程序更改了缩放.

使用以下代码进行runnable事件.这是您应该进行处理的地方.

private Handler handler = new Handler();

public static final int zoomCheckingDelay = 500; // in ms

private Runnable zoomChecker = new Runnable()
{
    public void run()
    {
        checkMapIcons();

        handler.removeCallbacks(zoomChecker); // remove the old callback
        handler.postDelayed(zoomChecker, zoomCheckingDelay); // register a new one
    }
};
Run Code Online (Sandbox Code Playgroud)

使用启动回调事件

protected void onResume()
{
    super.onResume();
    handler.postDelayed(zoomChecker, zoomCheckingDelay);
}
Run Code Online (Sandbox Code Playgroud)

停止它,当你使用离开活动

protected void onPause()
{
    super.onPause();
    handler.removeCallbacks(zoomChecker); // stop the map from updating
}
Run Code Online (Sandbox Code Playgroud)

如果你想要更长的写作,这里的文章可以在这里找到.


Abh*_*nav 7

我使用这个有onZoom函数监听器的库.http://code.google.com/p/mapview-overlay-manager/.效果很好.


Bil*_*ain 5

正如OP所说,使用onUserInteractionEvent并自己进行测试.

  • 在缩放级别改变之前调用`onUserInteractionEvent()`*.这实际上意味着对于每个缩放事件,监视缩放的应用程序正在运行一个事件. (3认同)

Dam*_*ian 5

这是一个干净的解决方案。只需将这个TouchOverlay私有类添加到您的活动中,然后将一个名为onZoom的方法(此内部类将其添加)即可。

注意,您必须将此TouchOverlay添加到您的mapView中,例如

mapView.getOverlays().add(new TouchOverlay());
Run Code Online (Sandbox Code Playgroud)

每当用户触摸地图时,它都会跟踪缩放级别,例如双击或缩小缩放,然后在缩放级别更改时触发onZoom方法(带有缩放级别)。

   private class TouchOverlay extends com.google.android.maps.Overlay {
            int lastZoomLevel = -1;

            @Override
            public boolean onTouchEvent(MotionEvent event, MapView mapview) {
                if (event.getAction() == 1) {
                    if (lastZoomLevel == -1)
                        lastZoomLevel = mapView.getZoomLevel();

                    if (mapView.getZoomLevel() != lastZoomLevel) {
                        onZoom(mapView.getZoomLevel());
                        lastZoomLevel = mapView.getZoomLevel();
                    }
                }
                return false;
            }
        }

        public void onZoom(int level) {
            reloadMapData(); //act on zoom level change event here
        }
Run Code Online (Sandbox Code Playgroud)