2014-02-26 107 views
0

请问我有问题, 如何设置依赖于当前速度的缩放级别? 例如,当移动缓慢。放大到近处,快速时放大到远处。Android MapView动态设置缩放级别

这里是我的算法:

private int calculateZoomLevelBySpeed(float speed) { 
    int zoomLevelMax = mapView.getMaxZoomLevel(); 
    // default 
    int zoomLevel = (zoomLevelMax > 0) ? (int)zoomLevelMax/2 : 4; 

    if (speed > 0) { 
     // 300km theoretically max/max zoom steps 
     double step = 300/zoomLevelMax; 
     zoomLevel = (int) Math.round(speed/step); 
     // reverse 
     zoomLevel = zoomLevelMax - zoomLevel; 
     zoomLevel = Math.min(zoomLevelMax, zoomLevelMax); 
     zoomLevel = Math.max(zoomLevelMax, 1); 
    } 
    return zoomLevel; 
} 

这不起作用,我该怎么办呢?

在此先感谢。

+0

嗨拉兹洛,你已经发布的代码是计算变焦级别或设置缩放级别? – Vijju

+0

'zoomLevel = Math.min(zoomLevelMax,zoomLevelMax);'? – cosmincalistru

+0

也许这是问题,我会尝试使用固定代码, zoomLevel = Math.min(zoomLevel,zoomLevelMax); – Laszlo

回答

-1

试试这个,我真的没有测试它,但我希望它能帮助

private int calculateZoomLevelBySpeed(float speed) 
{ 
    //assuming this line returns the max zoom level on maps 
    int zoomLevelMax = mapView.getMaxZoomLevel(); 
    // default 
    int zoomLevel = (zoomLevelMax > 0) ? (int)zoomLevelMax/2 : 4; 

    if (speed > 0) { 
     // 300km theoretically max/max zoom steps 
     double step = (speed/300) * zoomLevelMax; 
    } 
    return Math.Round(zoomLevel); 
} 
+0

正如我所看到的,zoomLevel不受此代码中的步骤影响,不会对可以修改zoomLevel的步骤进行任何操作 – Laszlo

-1

试试这样说:

private int calculateZoomLevelBySpeed(float speed) { 
    int zoomLevelMax = mapView.getMaxZoomLevel(); 

    if (speed > 0) { 
     // 300km theoretically max/max zoom steps 
     double step = 300/zoomLevelMax; 
     zoomLevel = (int) Math.round(speed/step); 
     // reverse 
     zoomLevel = zoomLevelMax - zoomLevel; 
    } 
    return zoomLevel; 
}