Добавить пользовательский элемент управления в качестве маркера OSMDROID BONUS PACK - PullRequest
0 голосов
/ 26 октября 2018

Могу ли я добавить пользовательский элемент управления в качестве маркера в OSMBONUSPACK?

Я создаю несколько кнопок и изображение в XML-файле Android с именем MyMarkerItem.xml

Я хотел бы что-то вроде MyMarker.setDesign(R.layout.MyMarkerItem);

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

ОК, я понимаю, что вы хотите, чтобы сам значок маркера был не простым растровым изображением, а макетом.

Что вы можете сделать, это использовать информационное окно маркера «вместо» значка маркера.

Прежде всего, создайте новый класс CustomInfoWindow, который наследуется от MarkerInfoWindow - стандартного информационного окна для маркеров и использует ваш собственный макет:

public class CustomInfoWindow extends MarkerInfoWindow {
    public CustomInfoWindow(MapView mapView) {
        super(my_own_layout, mapView);
    }
}

CustomInfoWindow myCustomInfoWindow = new CustomInfoWindow(mapView);

Затем, сразу после создания маркера, выполнитечто:

  • Установить значок маркера как растровое изображение размером 1x1 пикселя, полностью прозрачное: setIcon (mySmall_InvisibleIcon)
  • Установить собственное информационное окно маркера: setInfoWindow (myCustomInfoWindow)
  • Установите информационное окно "якорь" в наиболее подходящую и естественную позицию, в зависимости от "внешнего вида" вашего макета: setInfoWindowAnchor (ANCHOR_CENTER, ANCHOR_CENTER) может быть?
  • Принудительное открытие информационного окна: showInfoWindow ()

Все эти шаги довольно просты.

Но тогда, я полагаю, вы ожидаете некоторого поведения, когда пользователь нажимает на кнопки вашего макета.Итак, внутри вашего кода CustomInfoWindow вам, безусловно, придется проделать определенную работу => следовать этому руководству .

0 голосов
/ 26 октября 2018

Маркеры в Osmdroid на самом деле не являются представлениями для Android, и поэтому в них невозможно добавить другие компоненты.В основном это всего лишь изображение.

Простое и предлагаемое решение

Вы можете добавить свои компоненты в MarkerInfoWindow , которое отображается после щелчка,хотя.

marker.setInfoWindow(new MarkerInfoWindow(R.layout.MyMarkerItem, mapView));

Возможное «реальное» решение

Если вам действительно нужно такое поведение - это означает, что вам действительно нужно несколько кнопок, отображаемых на карте как «маркер»и дать пользователю возможность щелкнуть по ним - должна быть возможность создать собственную реализацию класса, похожего на маркер.Другими словами, вам придется реализовать свой собственный подкласс OverlayWithIW или Overlay и переопределить (в основном) метод draw (который должен рисовать ваши кнопки на холсте) иonSingleTapConfirmed метод, при котором вам нужно будет правильно определить, на какую кнопку нажал пользователь, и вызвать соответствующее действие.Попробуйте просмотреть источник класса Marker , это хороший пример.

Но имейте в виду: это сложная задача.Все, что связано с рисованием на холсте, может привести к проблемам с производительностью, если это не сделано правильноБудут крайние случаи, которые вы должны будете покрыть.Могут быть и другие проблемы, которые вам нужно решить и отладить.Я бы не предложил такое решение новичку.

...