用 Osmdroid 捏合缩放

Posted

技术标签:

【中文标题】用 Osmdroid 捏合缩放【英文标题】:Pinch to zoom with Osmdroid 【发布时间】:2011-11-26 20:25:41 【问题描述】:

我编写了一个地图应用程序,它有两个活动,一个活动显示谷歌地图视图,另一个显示使用 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 的示例应用程序?

【问题讨论】:

【参考方案1】:
MapView.setBuiltInZoomControls(true);
MapView.setMultiTouchControls(true);

【讨论】:

我发现当我移动我的两根手指时它看起来缩放很好,但只要我抬起它们,地图就会跳到不同的位置。 @Warpzit 这就是您所说的“实施不佳”吗? 在我的 Defy Plus 上效果很好。我还没有在其他设备上尝试过。 三星 s2 kitkat 完美运行。 tks。赞成!【参考方案2】:

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;

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

Here 是对此的进一步解释。

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

【讨论】:

感谢您的信息。我认为这些链接将证明是有用的。我想谷歌地图的活动(MapsActivity)必须在幕后实现捏。当然,他们的代码是封闭源代码,所以看起来我必须做一些工作,而不是仅仅复制他们的实现。为链接 +1。 我在我的程序中进行了实验,上面的代码对我有用。如果这更有帮助,那么 ++! 如果我不是这样的白痴,它会立即奏效!我错过了这行 mmapVw.setMultiTouchControls(true);我当然不会用这个来回答我自己的问题。因此,为了阻止其他人浪费时间并感谢您让我思考,我会接受您的回答。【参考方案3】:

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

【讨论】:

你找到好的解决方案了吗?如果是,请回答我的问题***.com/questions/15626091/osmdroid-and-pinch 不幸的是,没有,但我也在这里问了这个问题,也许有一天它会解决:) ***.com/questions/15159544/…【参考方案4】:

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

mapView.setMultiTouchControls(true); 

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

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

MapView.setBuiltInZoomControls(true);

已被 osmdroid 弃用。

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

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

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

CustomZoomButtonsController.Visibility.SHOW_AND_FADEOUT 

选项。

【讨论】:

以上是关于用 Osmdroid 捏合缩放的主要内容,如果未能解决你的问题,请参考以下文章

osmdroid - 更高的缩放级别?

osmdroid - 显示更大的图块

osmdroid 地图图块显示空白

OSMDROID:使用 osmdroid 地图实时获取当前坐标

Osmdroid vs Mapsforge [关闭]

osmdroid 的用户代理