使用Osmdroid进行缩放

Nic*_*ckT 11 android osmdroid

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

到目前为止,我一直只在模拟器上进行测试,其功能在显示的区域和覆盖数据方面完全相同.现在我在真正的姜饼设备上运行应用程序,我注意到谷歌地图活动似乎支持缩放,而Osmdroid不支持.

我没有写任何特定的代码来缩放谷歌方面或Osmdroid.这两个活动都实现了OnTouchListener.这两个活动只有OnTouch的存根,如:

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

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

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

小智 34

MapView.setBuiltInZoomControls(true);
MapView.setMultiTouchControls(true);
Run Code Online (Sandbox Code Playgroud)

  • 虽然它的实施很差,但它确实有效. (5认同)
  • 我发现当我移动我的两根手指时它看起来变焦很好,但是当我抬起它们时,地图会跳到另一个位置.@Warpzit这是"你实施得不好"的意思吗? (5认同)

dig*_*i32 5

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;
}
Run Code Online (Sandbox Code Playgroud)

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

是对此的进一步解释。

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

  • 如果我不是个白痴的话,它会立即起作用!我错过了 mMapVw.setMultiTouchControls(true); 行 我当然不会用这个来回答我自己的问题。因此,为了阻止其他人浪费时间,并感谢您让我思考,我会接受您的回答。 (2认同)