Osmdroid - 更改方向箭头的默认(白色)颜色(或如何自定义图标)

Osmdroid - change the default (white) color of the direction arrow (or how to customize the icon)

从osmdroid:6.03、mapsforge 0.8、osmbonuspack 6.4升级到最新版本后,我可以同时使用v4和v5 Mapsforge地图。 非常感谢 我使用了 6 年的这些很棒的库!

一切正常。不动的时候画的是黄色人,移动的时候方向箭头变成了WHITE。移动时我可以看到地图的中心被重新绘制并因此发生变化。如何将箭头改回更明显的箭头?

这些是库的版本:

implementation 'com.github.MKergall:osmbonuspack:6.6.0'
implementation 'org.osmdroid:osmdroid-android:6.1.6'
implementation 'org.osmdroid:osmdroid-mapsforge:6.1.6'
implementation 'org.mapsforge:mapsforge-map-android:0.11.0'
implementation 'org.mapsforge:mapsforge-map:0.11.0'

开始导航时,我在片段中使用:

gpsLocationProvider = new GpsMyLocationProvider( this.getContext());
gpsLocationProvider.setLocationUpdateMinTime( GPS.GPS_ACCURACY_HIGH_TIME);
gpsLocationProvider.setLocationUpdateMinDistance( GPS.GPS_ACCURACY_HIGH_DISTANCE);

myLocationOverlay = new MyLocationNewOverlay( mv);
myLocationOverlay.setDrawAccuracyEnabled( false); 
myLocationOverlay.enableMyLocation( gpsLocationProvider);
mv.getOverlays().add(myLocationOverlay);

myLocationOverlay.runOnFirstFix(new Runnable() {
    @Override
    public void run() {
        final GeoPoint myLocation = myLocationOverlay.getMyLocation();
        if (myLocation != null) {
            getMyActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mv.getController().animateTo(myLocation);
                    mv.getController().animateTo( myLocationOverlay.getMyLocation());
                    currentLocation = myLocationOverlay.getMyLocation();
                }
            });
        };
    }
});

如何将方向箭头转回可见方向?白色不容易区分;-)

注意:当我四处移动时,我可以看到地图的中心在移动。 'runOnUiThread' 行用于在 Fragment 中工作。如果没有这些行,我会因为不在 Looper/main threa 上绘图而出错。

大约 1.5 年前,标准的黄色人(当前位置)和绿色方向箭头已从 Osmdroid 包中删除。他们改变了这个图标,因为他们只有一个 dpi 版本,而不是每个 dpi 文件夹(h、m、xh、xxh、xxxh)都有一个版本。

因此,您必须添加自己的版本。建议使用 material.io 双音 "navigation" 48 版本的方向箭头。当您更改方向箭头时,如下所示,您还需要为当前位置提供一个图标。

检索到这些项目后,我将它们转换为位图。您可以使用 www.online-convert.com 等在线工具。

最后,您可以将以下代码添加到您的应用中:

Bitmap bitmapNotMoving = BitmapFactory.decodeResource(getResources(), R.drawable.twotone_insert_emoticon_black_48dp);
Bitmap bitmapMoving = BitmapFactory.decodeResource(getResources(), R.drawable.twotone_navigation_black_48);
myLocationOverlay.setDirectionArrow( bitmapNotMoving, bitmapMoving);

方向箭头正好位于 'real' 位置的中心。

感谢来自 Osmdroid 的开发者 monsieurtanuki!