Osmdroid - изменить по умолчанию (белый) цвет стрелки направления (или как настроить значок) - PullRequest
0 голосов
/ 21 марта 2020

После обновления с osmdroid: 6.03, mapsforge 0.8, osmbonuspack 6.4 до новейших версий, я могу работать как с картами v4, так и с v5 Mapsforge. Большое спасибо за эти замечательные библиотеки, которыми я пользуюсь уже 6 лет!

Все работает нормально. Не двигаясь, желтый человек рисуется, но при движении стрелка направления оказывается БЕЛЫЙ . При движении я вижу, что центр карты перерисовывается и, следовательно, меняется. Как я могу изменить стрелку обратно на более видимую стрелку?

enter image description here

Это версии библиотек:

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 используются для работы внутри фрагмента. Без этих линий я получаю ошибки для рисования не на Looper / основной трее.

1 Ответ

0 голосов
/ 23 марта 2020

Около 1,5 лет go стандартный желтый человек (текущая позиция) и зеленая стрелка направления были удалены из пакета Osmdroid. Они изменили этот значок, потому что у них была только одна версия для точек на дюйм и не было версии для каждой папки точек на дюйм (h, m, xh, xxh, xxxh).

Итак, вам нужно добавить свою собственную версию. Рекомендовалось взять из material.io двухцветную версию «навигация» 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);

Стрелка направления приятно центрируется в «реальной» позиции.

Спасибо, разработчик, monsieurtanuki из Osmdroid!

...