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

MapView и Form.FullScreen


Rusland

Вопрос

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

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 эмодзи.

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

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

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

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