使用Osmdroid进行缩放

时间:2011-09-28 12:36:30

标签: android osmdroid

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

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

我还没有编写任何专门用于缩放谷歌或Osmdroid缩放的代码。这两个活动都实现了OnTouchListener。这两个活动都只有OnTouch的存根,如:

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

我在Osmdroid活动中的mapview属于类: org.osmdroid.views.MapView

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

4 个答案:

答案 0 :(得分:33)

MapView.setBuiltInZoomControls(true);
MapView.setMultiTouchControls(true);

答案 1 :(得分:3)

Osmdroid具有缩放功能。您需要设置一个gesturelistener来检查捏合动作,此时您应该在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;
}

我添加的代码处理了捏 - 完成的布尔值是我在程序中实现的,以确定何时刷新地图。这应该会帮助你更多。

Here是对此的进一步解释。

如果您正在寻找不同的内容,请尝试阅读here。自2010年6月以来,Android一直在支持捏合行动。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

mapView.setMultiTouchControls(true); 

正在为我工​​作,以便进行缩放(在 2021 年检查)。

注意显示zoom-controller的功能(基本上是(-)和(+)的按钮)-

MapView.setBuiltInZoomControls(true);

已被 osmdroid 弃用。

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

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

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

CustomZoomButtonsController.Visibility.SHOW_AND_FADEOUT 

选项。