在谷歌地图的缩放事件在安卓

2022-09-01 01:52:28

我们正在构建一个应用程序,该应用程序正在使用Android的google maps api。

我有我的MapController和MapView,我使用以下命令启用内置缩放控件:

mapView.setBuiltInZoomControls(true);

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

更新

mapView.getZoomControls() 已弃用。文档建议使用mapView.setBuiltInZoomControls(bool)代替。这没关系,但我根本无法弄清楚如何从内置的缩放控件中对事件进行操作。


答案 1

使用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
        }
    }
});

答案 2

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

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

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
    }
};

启动回调事件

protected void onResume()
{
    super.onResume();
    handler.postDelayed(zoomChecker, zoomCheckingDelay);
}

并在您离开活动时使用

protected void onPause()
{
    super.onPause();
    handler.removeCallbacks(zoomChecker); // stop the map from updating
}

这是基于这篇文章可以在这里找到,如果你想写一个更长的写。