用 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 捏合缩放的主要内容,如果未能解决你的问题,请参考以下文章