Перейти к содержанию
Fire Monkey от А до Я
  • 0

MapView InfoWindowAdapter - нужно отобразить свой текст в окне по клику на маркер


sargon

Вопрос

Добрый день, уважаемое сообщество. Возник такой вопрос, по нажатию на маркер на карте нужно показывать свой InfoWindow. как тут. Может быть кто-то такое уже делал, прошу помочь кодом. Попытался сделать как здесь. Там на Java, но я переписал на Delphi. Компилится, но в рантайме выдает Segmentation class (11), AV и проч. может кто-нибудь может подсказать в чем проблема. Делаю так

... 
TMyAndroidInfoWindowAdapter = class (TJavaLocal, JGoogleMap_InfoWindowAdapter)
 private
   FMapControl: TAlexAndroidMapView;
 public
   function getInfoContents(P1: JMarker): JView; cdecl;
   function getInfoWindow(P1: JMarker): JView; cdecl;
 end;
...

function TMyAndroidInfoWindowAdapter.getInfoContents(P1: JMarker):JView;
var

  LinearLayout:JLinearLayout;
  snippet, title:JTextView;
begin
    LinearLayout:=TJLinearLayout.JavaClass.init(TAndroidHelper.Activity);


    title:=TJTextView.JavaClass.init(TAndroidHelper.Activity);
    title.setTextColor(TAlphaColorRec.Brown);
    title.setText(JCharSequence(P1.getTitle));

    snippet:=TJTextView.JavaClass.init(TAndroidHelper.Activity);
    snippet.setTextColor(TAlphaColorRec.Coral);
    snippet.setText(JCharSequence(P1.getSnippet));

    LinearLayout.addView(title);
    LinearLayout.addView(snippet);

  result:=LinearLayout;

end;

function TMyAndroidInfoWindowAdapter.getInfoWindow(P1: JMarker):JView;
begin
  Result:=nil;
end;

При создании экземпляра JMapView делаю так

...    
if not Assigned(FWindowsAdapter) then
        FWindowsAdapter:=TAlexAndroidInfoWindowAdapter.Create;

      FJMapView.getMap.setInfoWindowAdapter(FWindowsAdapter);
...

FWindowsAdapter это поле в моем классе

  TMyAndroidMapView = class(TDPFANDBaseControl)

  protected
    ...
    FWindowsAdapter:TAlexAndroidInfoWindowAdapter;

MapView не использую реализовал свой контрол на базе dpf android native components Романа Янковского. Ошибки валятся после выполнения этого метода

function TMyAndroidInfoWindowAdapter.getInfoWindow(P1: JMarker):JView;
begin
  Result:=nil; <------ выполнился и сразу Class Segmentation Fault (11)
end;

Опишу зачем вообще я это делаю. Мне в InfoWindow по клику на маркер на карте нужно всего навсего отобразить текст в несколько строк (свойство маркера Snippet), но так как перенос строк почему-то не работает взялся за реализацию WindowInfoAdapter. Может быть все это проще можно сделать. Заранее благодарю за помощь.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
5 часов назад, Rusland сказал:

Есть компонент MapView для отображения карты.

Как ставить маркеры смотрите здесь

Да, я знаю про этот компонент. К сожалению мне пришлось от него отказаться, он почему-то как-то странно мигает при переключении с вкладки на вкладку (TTabControl), не знаю только у меня ли это, может быть что-то делаю не правильно. (мигания эти не устраивают заказчика). Может быть вы подскажите, есть ли у вас промигивания, когда компонент лежит на одной из вкладок TabControl и вы между вкладками переключаетесь??? (заметил что такое поведение чаще на разных Huawei и TCL и проч. на исконно брендовых аппаратах работает нормально). 

Свой вопрос частично решил - строю свой popup в getInfoWindow, getInfoContent почему-то не срабатывает. В документации говориться, что должен срабатывать сначала getInfoWindow, а потом getInfoContent если getInfoWindow возвращает Null. Вот пишу Resuly:=nil и вылетает ошибка а до getInfoContent не доходит. В принципе нормально работает и текст свой можно писать и цвет задавать и шрифт, все можно, кроме картинки и без описания layout в xml. Единственно, что не устраивает, окно без язычка к маркеру получилось, а хочется с язычком (corner), попробую описать Layout и подключить. В любом случае, очень благодарен вам за ответ! 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...