OSMDroid-在Android API 28上缩小时默认标记会移动

时间:2019-02-21 16:08:19

标签: android osmdroid

我最近开始使用OSMDroid,但是我很难在Android API 28的特定Geopoint上获得默认标记。 我遵循了OSMDroid Github上的教程,并编写了如下代码:

    //Making a Mapbox TileSource
    MapBoxTileSource mbTest = new MapBoxTileSource("mapbox.streets", ACCESS_TOKEN);
    map = (MapView) findViewById(R.id.map);
    map.setTileSource(mbTest);

    //Setting up map
    map.setVisibility(View.VISIBLE);
    map.setMultiTouchControls(true);
    map.getController().setCenter(new GeoPoint(latitude,longitude));
    map.getController().setZoom(14d);

    //Create a marker where the user is
    Marker positionMarker = new Marker(map);
    positionMarker.setDefaultIcon();
    positionMarker.setPosition(new GeoPoint(latitude, longitude));
    map.getOverlays().add(positionMarker);

当我测试我的应用程序时,我得到以下结果(我使用OSMDroid绘制了一个多边形,它似乎可以正常工作):

The marker should be on the corner of the polygon

The marker is moving when zooming out

我在Android API 22设备上测试了同一个应用程序,并且标记可以很好地工作,并且在缩放级别进行缩放时可以将其放置在正确的位置。

有什么方法可以修复或改进我的代码,以使标记在API 28上正常工作?

2 个答案:

答案 0 :(得分:1)

我阅读了有关OSMDroid的一些文档,似乎硬件加速并不总是稳定的。我试图停用它,但它起作用了。

因此,如果您的标记在放大或缩小时似乎不在正确的位置并在移动,则只需在Android清单中为此活动停用硬件加速即可:

<activity
    android:name=".MapActivity"
    android:hardwareAccelerated="false"/>

编辑:我已经与OSMDroid进行了进一步的合作,当我将自定义图标用作标记时,不会发生此问题,因此它对您的应用程序不是大问题。

答案 1 :(得分:0)

mapView.setLayerType(View.LAYER_TYPE_SOFTWARE, null) 可以解决。

这不是我的解决方案,花了 here