Перейти к содержанию

Вопросы

Поставил кнопочку и написал обработчик чтобы скрывать показывать верхнюю и нижнюю панель системы

procedure TForm1.SbtMaximizeClick(Sender: TObject);
begin
  Form1.FullScreen:=not Form1.FullScreen;
end;

Если на экране есть MapView и Form1.Fullscreen = true, то стоит только один раз потыкать пальцем по карте, как снизу появляется стандартная панель с кнопками Back, Home, Menu и никуда не пропадает, причем она перекрывает часть рабочей области приложения.

Как от этого избавится?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0
В 14.07.2016 в 13:28, Rusland сказал:

Поставил кнопочку и написал обработчик чтобы скрывать показывать верхнюю и нижнюю панель системы


procedure TForm1.SbtMaximizeClick(Sender: TObject);
begin
  Form1.FullScreen:=not Form1.FullScreen;
end;

Если на экране есть MapView и Form1.Fullscreen = true, то стоит только один раз потыкать пальцем по карте, как снизу появляется стандартная панель с кнопками Back, Home, Menu и никуда не пропадает, причем она перекрывает часть рабочей области приложения.

Как от этого избавится?

Вот и у меня была похожая проблема, вернее одна из множества проблем с отображением при использовании TMapView. Найти решение в рамках TMapView за разумное время так и не получилось к сожалению. Именно поэтому сделал свой контрол для отображения карты. Все проблемы исчезли - практически все, те, что остались, получилось обойти при построении UI с учетом этих "особенностей", но мне под мои нужды хватает за глаза своего контролла. TMapView имхо сыроват пока,можно посмотреть на WebGMaps от TMS или TECN для сравнения - но все платное. Справедливости ради хочу сказать, что и андройд сам по себе не без греха, так что дело может быть совсем и не в TMapView. Пишу также на Java, так там проблем с JmapView еще больше.

Если кто-то опишет как решить проблемы перерисовки (мигания, артефакты при открытии и проч) средствами TMapView - это будет супер. Ну или ждем новой версии от разрабов.

А вам уважаемый Rusland могу посоветовать, если есть возможность, отказаться от использования TMapView, и сделать контрол на базе Jmapview - и все проблемы такого рода отпадут, должны отпасть. А если вы все-таки найдете решение с использованием стандартного MapView, то прошу поделиться. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

 

В 16.07.2016 в 16:52, sargon сказал:

Справедливости ради хочу сказать, что и андройд сам по себе не без греха, так что дело может быть совсем и не в TMapView.  

Да, возможно что это проблема самой системы.

 

В 16.07.2016 в 16:52, sargon сказал:

А вам уважаемый Rusland могу посоветовать, если есть возможность, отказаться от использования TMapView, и сделать контрол на базе Jmapview - и все проблемы такого рода отпадут, должны отпасть. 

Можете приложить тестовый проект, в котором используете JMapView?

Отредактировал Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 18.07.2016 в 10:05, Rusland сказал:

Можете приложить тестовый проект, в котором используете JMapView?

Конечно, прикладываю. Сразу скажу писал для себя и на скорую руку поэтому комментов нет практически, и где-то используются не особо красивые решения, есть также явные косяки в реализации, но их не устранял так как под себя делал, и знаю как обойти их - например jmapview не корректно  размещается в tabcontrol (не корректно прорисовывается), но у меня задачи с размещением контрола сугубо на форме, поэтому до исправления руки не дошли - но можете дописать это под себя, если сие пофиксите и скините мне - буду очень благодарен. Модуль называется Android.Native.JMapView - он дает возможность работы с JMapView. TMapView тоже естественно основан на JmapView но там гораздо больше функционала, на мой взгляд лишнего, а того что надо нету. Здесь сделано по-проще по аналогии с Java. Мне этого модуля хватает во всяком случае. За основу взят DPF.JmapView Романа Янковского большое спасибо ему за это. Android.BaseControl - этот файл содержит класс от которого унаследован мой класс карты в модуле  Android.Native.JMapView.

TAndroidNativeMapView умеет все самое необходимое для карты (ну по моим меркам естественно)

вот список возможностей

    procedure AddMarker - добавляет маркер на карту
    procedure AddPolyline - добавляет полилинию
    procedure RemoveMarker - удаляет маркер
    procedure SetCameraPosition(Lat, Lng: Double; Zoom: Single) - устанавливает камеру по координатам с зумом
    procedure Clear; - очищает карту от всего
    procedure Loaded; override; - загрузить карту
    procedure MapShow; - показать карту (без миганий удалось сделать)
    procedure MapHide; скрыть карту без миганий
    procedure Resume; возобновить прорисовку карты
    procedure Suspend; приостановить прорисовку карты
    function Snapshot(Recipient: TMapScreenshotRecipient): Boolean; - сделать скрин карты
    function SelectMarker(MarkerIndex:integer):Boolean; выделить маркер заданным цветом
    function SelectReset:Boolean; сбросить выделенный маркер к цвету который у него был или битмапу
 

    property MyLocationEnabled - мое местоположение  включение\выключение
    property ZoomControlEnabled - включение\выключение зумма
    property OnMarkerClick - обработка события клика по маркеру
    property OnMapLoaded - обработка события загрузки карты
    property OnMapClick - обработка события клика по карте
    property OnInfoWindowClick - обработка события клика по информационному окну
    property Color - задать цвет информационного окна
    property CustomWindowAdapter - использовать ли кастомное информационное окно (true\false)

любой другой функционал который есть или нету в стандартном MapView в рамках JGoogleMap можно легко добавить если он вам понадобится

Ну и если будут вопросы задавайте - постараюсь оперативно отвечать

Прикрепляю также apk -шку на всякий - там по нажатию кнопки тест выполняется ваш код  

Form1.FullScreen:=not Form1.FullScreen;

У меня нормально работает ничего не появляется никаких панелей - пробуйте у себя. IDE Delphi Berlin - проверял на Android 4.1 и 5.0

TEST.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

На одном 7'' планшете Lenovo вижу на месте JMapView белое окно (карты не вижу), ведет себя так же как TMapView - в режиме FullScreen=true при нажатии на JMapView вылезает нижняя панель с кнопками (смена FullScreen c false на true не помогает, нижняя панель потом уже не исчезает).

А на 8'' Lenovo вообще программа вылетает при старте.

Отредактировал Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
11 часов назад, Rusland сказал:

На одном 7'' планшете Lenovo вижу на месте JMapView белое окно (карты не вижу), ведет себя так же как TMapView - в режиме FullScreen=true при нажатии на JMapView вылезает нижняя панель с кнопками (смена FullScreen c false на true не помогает, нижняя панель потом уже не исчезает).

А на 8'' Lenovo вообще программа вылетает при старте.

А можете скинуть данные утилиты SysCheck по этим планшетам?

А вы компилировали сами или ставили apk который идет в архиве?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Доброго дня, спасибо за скрины - вроде все как нужно по ним

4 часа назад, Rusland сказал:

Компилировал сам в Берлине

 

В 21.07.2016 в 09:54, Rusland сказал:

На одном 7'' планшете Lenovo вижу на месте JMapView белое окно (карты не вижу),

80% вероятности, что вы не сгенерили ключ для своей IDE (debug.keystore как оказалось разный на разных компах даже если одну и ту же инсталляшку используешь) и не прописали его в Google.console для Google Maps сервиса. Если сгенерили - то переименуйте проект - потому что в моей консоли проект с таким именем уже существует - там у гугла какой-то дивный глюк с именами проектов, даже под разными пользователями. Работает ли у вас апк собранная у меня?

В 21.07.2016 в 09:54, Rusland сказал:

А на 8'' Lenovo вообще программа вылетает при старте.

Это нужно в дебаге посмотреть, что за ошибка вываливается, идей никаких нет, тут что угодно может быть - какие версии андройдов на устройствах? Возможные причины: не обновлены гугл-сервисы, версия Андройда (я собирал тестовую АПК под 6-ку), интелловский проц - при эмуляции ARM кода MapView не работает, да и много чего еще может быть.

Нашел устройство на котором навигационная панель "рисованная" - проверил - да, проблема воспроизводится. Как оказалось, причина в косяках при реализации джавовского NativeLayout - на котором размещается MapView. На нем размещается оно везде, что в FireMonkey, что в Java. На java такая же проблема с картой... но получилось устранить так 

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Это на Java (код скрывает панель) - работает, но карту надо перерисовать invalidate сделать, иначе панелька "как бы" и не убирается - т.е. она отображается на карте как рисунок - в java так решена проблема с размещением чего-то поверх карты я так понимаю.

Интерпретация Java на Delphi

type
  TRunner = class(TJavaLocal, JRunnable)
  private
    FRunMethod: TThreadProcedure;
  public
    constructor Create(RunMethod: TThreadProcedure); overload;
    procedure run; cdecl;
  end;

var
  Runner:TRunner;

procedure TForm1.Button2Click(Sender: TObject);
begin
Runner := TRunner.Create(
    procedure
    begin
      TAndroidHelper.Activity.getWindow.getDecorView().setSystemUiVisibility
        (TJView.JavaClass.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
    end);

  TAndroidHelper.Activity.runOnUiThread(Runner);

  Sleep(400);
  Form1.Recreate;
  Map.Repaint; // Вот тут нужно что-то додумать
end;

{ TRunner }

constructor TRunner.Create(RunMethod: TThreadProcedure);
begin
  FRunMethod := RunMethod;
  Create;
end;

procedure TRunner.run;
begin
  FRunMethod;
end;

У меня срабатывает, но панелька не исчезает, потому что она рисуется системой на карте как картинка (как и в случае с Java), и пропадает только после касания области панельки на карте, когда она перерисуется (если вы коснетесь панельки она съедет вниз, но Map.repaint нужно закомментить, иначе оно так и висит, repaint немного не так как ожидается работает), точнее не она NativeLayout.

map.repaint не срабатывает - как сделать на delphi пока не придумал. Сейчас к сожалению нету времени покапаться и решить вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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


  • Похожий контент

    • От gutalin79
      Почему при добавлении MapView в пример Android Service, приложение перестает работать?
      AndroidSimpleService.zip
       
       
       
      Пример делал по этому видео: 
       
    • От Олег Игоревич
      Добрый день! 
      Проблема с компонентом TMApView в Tokyo 10.2.3 при запуске приложение сразу закрывается.
      Если запустить отладчик при загрузке IDE сообщает "... raised exception class EJNI with message 'Java class JGooglePlayServicesUtil could not be found'."
      Пробовал с пустой формой и одним MapView и демо результат тот же. В Berlin 10.1 все работает нормально, ключи и разрешения установлены.
      Куда капать ? Help! 
    • От tLink
      Всем доброго времени суток,
      Столкнулся с проблемой на iOS. На форме TabControl, на одной из вкладок лежит MapView (примерчик приложил). Если "свернуть/развернуть" приложение и походить по вкладкам, то пропадают иконки у TabControl, показывает как чёрные квадраты. Иконки установлены через ImageList. Такой же эффект и у ListView/Image на соседних вкладках. Можете что-то подсказать?
       
      project1 (2).rar
    • От dim
      Подскажите как сделать. Нужно разместить маркер по центру компонента MapView и что бы при перемещении по карте он так и оставался видимым по центру и соответственно 
        myCoordinat.latitude := MapView3.Location.Latitude;   myCoordinat.longitude := MapView3.Location.longitude; выдавал координаты под этим маркером
      и второй вопрос: по полученным координатам я получаю адрес myGeocoder.GeocodeReverse(myCoordinat) , но он не соответствует КЛАДР (да и вообще много ошибок в названии улиц), а мне надо привязать к своей базе адресов. Посоветуйте кто как выходил из ситуации, или как получить из него список всех улиц по городу 
    • От dim
      Если на форме лежит MultiView у которого Mode:= TMultiViewMode.Drawer на нем лежит MapView. Если открывается боковое меню то оно находиться под MapView и соответственно не доступно. Как это исправить?
    • От FREEFAR
      Доброе время суток!
      Раньше все манипуляции с отображением геолокации и картами делал непосредственно в WebBrowser через api yandex.
      Сейчас обратил внимание на TmapView но ума не приложу как в нем построить маршрут между двумя и более точками? Направьте пжл ибо в интернете инфо не вижу... И возможно ли вообще это? Видео от ZuBy смотрел но не разобрался с его компонентой ибо не особо силен... Буду очень признателен. Может где пример есть подобной реализации , думаю сам допру дальше 
    • От AlexShaman
      Поддерживает ли MapView в Delphi 10 работу в windows среде?
      У компонента в списке поддерживаемых платформ указано, что поддерживает. 
      Чем отличается работа с MapView в Android и Windows?
    • От Rusland
      Есть два планшета Lenovo Tab 2 A7-30DC (назовем их A и Б). Есть написанная на Berlin программа с MapView.
      По умолчанию у обоих стояла ОС Android 4.4.2. На A я обновил операционку до максимальной официальной версии 5.0.1, на Б оставил 4.4.2
      На Б программа худо-бедно работает, но на MapView не показывает синюю точку - текущее местоположение (сторонние программы GPS Status, Яндекс Навигатор GPS координаты ловят нормально). Пробовал компилировать на Seattle - тоже самое. LocationSensor сначала неправильно показал координаты, ошибся на 300км, но после перезапуска программы стал показывать правильно. Почему MapView не показывает, не понимаю.
      На А программа зависает при попытке поставить метку на MapView или нарисовать маршрут получаю Segmentation fault.
      Вот, например:
      procedure TFrmMain.SetMarkerOnMap(Id:integer;NaimObj,AdrObj:String;Lat,Lon:Double); var Descrip: TMapMarkerDescriptor; MyLocation: TMapCoordinate; begin TThread.Queue(TThread.CurrentThread, procedure begin try if (MapView.Visible) then begin MyLocation:=TMapCoordinate.Create(Lat,Lon); Descrip:=TMapMarkerDescriptor.Create(MyLocation); Descrip.Icon:=ImObjBlueMarker.Bitmap; Descrip.Draggable:=False; Descrip.Title:=NaimObj; Descrip.Snippet:='['+Id.ToString+'] '; if (AdrObj<>'') then Descrip.Snippet:=Descrip.Snippet+AdrObj; MyMarker:=MapView.AddMarker(Descrip); // тут Segmentation fault LMarkers.Add(MyMarker); end; except end; end); end; Как решить проблему?
       
       
    • От Rusland
      Как во время выполнения программы включить/выключать отображение пробок на MapView?
      Так не компилируется:
       
      MapView.LayerOptions.Traffic:=not MapView.LayerOptions.Traffic;  
    • От umkes
      Есть ли возможность при использовании MapView и при наличии нескольких маркеров на нем, посчитать оптимальный Location и Zoom mapview'a? Чтобы поместилось как можно больше маркеров.
      Вроде как на javascript это делается с помощью такого кода:
      var latlngbounds = new google.maps.LatLngBounds(); for (var i = 0; i < markerslat.length; i++) { latlngbounds.extend(markerslat[i]); } map.fitBounds(latlngbounds); Использование WebBrouser не подходит.
      Может у кого-то есть что сказать по этому поводу?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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