12

我编写了一个地图应用程序,它有两个活动,一个活动显示谷歌地图视图,另一个显示使用 osmdroid 3.0.5 jar 的等效视图。

到目前为止,我一直只在模拟器上进行测试,并且在显示的区域和覆盖数据方面功能完全相同。现在我已经在真正的 Gingerbread 设备上运行了该应用程序,我注意到 Google 地图活动似乎支持捏缩放,而 Osmdroid 则不支持。

我还没有为 Google 端或 Osmdroid 编写任何特定于捏缩放的代码。这两个活动都实现了 OnTouchListener。这两个活动都只有一个 OnTouch 存根,例如:

@Override
public boolean onTouch(View v, MotionEvent e) {
    // chain it for now
    return false;
}

我在 Osmdroid 活动中的地图视图属于此类:org.osmdroid.views.MapView

有谁知道如何使用 osmdroid 使捏缩放工作或知道使用 osmdroid 的示例应用程序,我可以学习并适应我的应用程序?

4

4 回答 4

37
MapView.setBuiltInZoomControls(true);
MapView.setMultiTouchControls(true);
于 2012-01-20T13:35:53.650 回答
4

Osmdroid 具有缩放功能。您需要设置一个手势监听器来检查捏合动作,此时您应该调用 osmdroid 中的缩放功能。我相信 osmdroid 3.0.5 它就像

mOsm.getController.setZoomLevel(someNumber)(mOsm 是地图视图的一个实例)。

我有缩放功能适用于相反的捏(你的手指开始并拢然后展开)。我建议使用 MotionEvent (就像你目前正在做的那样)并做这样的事情:

boolean finished = false;

@Override
public boolean onTouch(View v, MotionEvent e) {

    switch (e.getAction()) {

        case MotionEvent.ACTION_DOWN:
            finished = false;
            break;

        case MotionEvent.ACTION_MOVE:
            finished = false;
            break;

        case MotionEvent.ACTION_UP:
            //action is finishing at this point, so now I can do my refreshActionOnMap();
            if (!finished) 
                refreshActionOnMap();
            break;
    }
    return true;
}

我添加的代码处理了这个问题——完成的布尔值是我在我的程序中实现的,以确定何时刷新地图。那应该可以帮助您更多。

是对此的进一步解释。

如果您正在寻找不同的东西,请尝试阅读此处。显然,自 2010 年 6 月以来,Android 一直支持捏合操作。

于 2011-09-29T03:24:15.777 回答
2

是否可以不缩放到地图中心,而是缩放到用户两根手指的中间。

于 2013-03-01T13:59:37.183 回答
1

正如shameus.burp所说,代码行-

mapView.setMultiTouchControls(true); 

正在为我工​​作以捏缩放(检查于 2021 年)。

请注意,显示缩放控制器的功能(基本上是(-)和(+)的按钮)-

MapView.setBuiltInZoomControls(true);

已被 osmdroid 弃用。

因此,您可以使用代码行 -

mapView.getZoomController().setVisibility(CustomZoomButtonsController.Visibility.ALWAYS);

默认情况下(不添加最后一行代码)osmdroid 设置为显示和淡出缩放控制器。相当于

CustomZoomButtonsController.Visibility.SHOW_AND_FADEOUT 

选项。

于 2021-07-14T08:51:32.020 回答