generated from Grigo/AndroidTemplate
Подготовка к крупным изменениям: карта, AIS и UI
- Яндекс/MapForge: правки в менеджерах и обёртках маркеров (улучшена отрисовка/логика) - NMEAParser: корректировки парсинга и стабильности - Модель AISVessel: уточнение полей/логики - Настройки: правки в SettingsActivity и SettingsManager, актуализация AppController - UI: обновлены activity_main, activity_settings, bottom_sheet_ais_vessel; меню main_menu - Ресурсы: добавлен drawable/targetclassa.xml, обновлён drawable/target.xml - Конфигурация: правки AndroidManifest и app/build.gradle - Прочее: изменения в .idea (не влияют на сборку)
This commit is contained in:
@@ -46,7 +46,9 @@ public class YandexMapImpl implements MapInterface {
|
||||
try {
|
||||
this.mapObjects = mapView.getMap().getMapObjects().addCollection();
|
||||
// Инициализируем менеджер маркеров
|
||||
this.markerManager = new YandexMarkerManager(context, mapObjects, mapView);
|
||||
com.grigowashere.aismap.utils.SettingsManager settingsManager =
|
||||
new com.grigowashere.aismap.utils.SettingsManager(context);
|
||||
this.markerManager = new YandexMarkerManager(context, mapObjects, mapView, settingsManager);
|
||||
} catch (Exception e) {
|
||||
// Ошибка создания коллекции объектов карты
|
||||
}
|
||||
@@ -129,7 +131,7 @@ public class YandexMapImpl implements MapInterface {
|
||||
@Override
|
||||
public void centerOnPosition(double latitude, double longitude) {
|
||||
Point point = new Point(latitude, longitude);
|
||||
CameraPosition cameraPosition = new CameraPosition(point, 15.0f, 0.0f, 0.0f);
|
||||
CameraPosition cameraPosition = new CameraPosition(point, 13.0f, 0.0f, 0.0f);
|
||||
mapView.getMap().move(cameraPosition, new Animation(Animation.Type.SMOOTH, 1.0f), null);
|
||||
}
|
||||
|
||||
@@ -207,6 +209,15 @@ public class YandexMapImpl implements MapInterface {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Принудительно обновляет все маркеры при изменении зума
|
||||
*/
|
||||
public void forceRefreshMarkersOnZoomChange() {
|
||||
if (markerManager != null) {
|
||||
markerManager.forceRefreshAllMarkers();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет и восстанавливает финализированные маркеры
|
||||
*/
|
||||
@@ -226,6 +237,42 @@ public class YandexMapImpl implements MapInterface {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Включает/выключает отображение путей движения
|
||||
*/
|
||||
public void setPathTrackingEnabled(boolean enabled) {
|
||||
if (markerManager != null) {
|
||||
markerManager.setPathTrackingEnabled(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Очищает путь конкретного судна
|
||||
*/
|
||||
public void clearVesselPath(String mmsi) {
|
||||
if (markerManager != null) {
|
||||
markerManager.clearVesselPath(mmsi);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Очищает все пути движения
|
||||
*/
|
||||
public void clearAllPaths() {
|
||||
if (markerManager != null) {
|
||||
markerManager.clearAllPaths();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет настройки отображения путей
|
||||
*/
|
||||
public void updatePathSettings(int pathColor, int predictionColor, float pathWidth, float predictionWidth) {
|
||||
if (markerManager != null) {
|
||||
markerManager.updatePathSettings(pathColor, predictionColor, pathWidth, predictionWidth);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получение MapView для использования в layout
|
||||
@@ -257,10 +304,11 @@ public class YandexMapImpl implements MapInterface {
|
||||
// Включаем жесты поворота карты
|
||||
mapView.getMap().setRotateGesturesEnabled(true);
|
||||
|
||||
// Добавляем слушатель изменений камеры для обновления маркеров при повороте
|
||||
// Добавляем слушатель изменений камеры для обновления маркеров при повороте и зуме
|
||||
mapView.getMap().addCameraListener(new com.yandex.mapkit.map.CameraListener() {
|
||||
private long lastUpdateTime = 0;
|
||||
private static final long UPDATE_THROTTLE = 50; // 50мс между обновлениями
|
||||
private static final long UPDATE_THROTTLE = 200; // 200мс между обновлениями (увеличено для снижения нагрузки)
|
||||
private float lastZoom = -1;
|
||||
|
||||
@Override
|
||||
public void onCameraPositionChanged(com.yandex.mapkit.map.Map map,
|
||||
@@ -270,9 +318,23 @@ public class YandexMapImpl implements MapInterface {
|
||||
|
||||
// Обновляем маркеры в реальном времени с throttling
|
||||
long currentTime = System.currentTimeMillis();
|
||||
if (currentTime - lastUpdateTime >= UPDATE_THROTTLE) {
|
||||
onMapRotationChanged();
|
||||
float currentZoom = cameraPosition.getZoom();
|
||||
|
||||
// Проверяем, изменился ли зум значительно (больше чем на 1.0)
|
||||
boolean zoomChanged = Math.abs(currentZoom - lastZoom) > 1.0f;
|
||||
|
||||
if (currentTime - lastUpdateTime >= UPDATE_THROTTLE || zoomChanged) {
|
||||
//onMapRotationChanged();
|
||||
// Обновляем маркеры только при значительных изменениях
|
||||
if (zoomChanged) {
|
||||
// При изменении зума принудительно обновляем все маркеры
|
||||
forceRefreshMarkersOnZoomChange();
|
||||
} else {
|
||||
// При повороте только проверяем валидность маркеров
|
||||
checkAndRestoreMarkers();
|
||||
}
|
||||
lastUpdateTime = currentTime;
|
||||
lastZoom = currentZoom;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user