Skip to content

Latest commit

 

History

History
163 lines (128 loc) · 7.36 KB

File metadata and controls

163 lines (128 loc) · 7.36 KB

Слайдер для навигации между объектами

Обзор

Теперь приложение имеет универсальный слайдер для навигации между всеми объектами на карте! Пользователи могут легко перемещаться между системными и пользовательскими плейсмарками, а также получать детальную информацию о каждом объекте.

Новые возможности

1. Универсальный слайдер

  • Все объекты в одном месте: Системные и пользовательские плейсмарки
  • Интуитивная навигация: Стрелки влево/вправо и слайдер
  • Автоматический выбор: Новые метки автоматически выбираются

2. Умная навигация

  • Перемещение к объекту: Автоматическое перемещение карты к выбранному объекту
  • Плавная анимация: Красивые переходы между объектами
  • Циклическая навигация: Переход от последнего к первому объекту

3. Детальная информация

  • Тип объекта: Индикатор системного (S) или пользовательского (C) объекта
  • Координаты: Точные координаты каждого объекта
  • Описание: Дополнительная информация для системных объектов

Как использовать

Навигация между объектами

  1. Стрелки навигации: ← → для перехода между объектами
  2. Слайдер: Перетаскивание для быстрого выбора
  3. Автоматическое перемещение: Карта плавно летит к выбранному объекту

Управление объектами

  • Просмотр информации: Детали объекта отображаются в карточке
  • Удаление меток: Кнопка "Удалить" для пользовательских объектов
  • Очистка: Кнопка "Очистить все" для удаления всех пользовательских меток

Технические детали

Структура данных

enum class MapObjectType {
    SYSTEM,     // Системные плейсмарки
    CUSTOM      // Пользовательские плейсмарки
}

data class MapObject(
    val id: String,
    val title: String,
    val position: Point,
    val type: MapObjectType,
    val description: String?
)

Навигация

// Перемещение к объекту
fun moveToSelectedObject(placemarks: List<PlacemarkViewState>) {
    val allObjects = getAllObjectsForSlider(placemarks)
    if (selectedObjectIndex.value < allObjects.size) {
        val selectedObject = allObjects[selectedObjectIndex.value]
        mapState.moveToObject(selectedObject.position, selectedObject.title)
    }
}

Автоматическое перемещение карты

fun moveToObject(point: Point, title: String) {
    // Плавное перемещение к объекту с зумом 16.0
    // Длительность анимации: 2 секунды
}

UI компоненты

1. Заголовок с навигацией

  • Общее количество объектов
  • Кнопки предыдущий/следующий
  • Индикатор текущего объекта (1/5)

2. Слайдер

  • Визуальный выбор объекта
  • Плавное перетаскивание
  • Автоматическое перемещение карты

3. Карточка объекта

  • Название и тип объекта
  • Координаты
  • Описание (для системных объектов)
  • Кнопка удаления (для пользовательских)

4. Кнопки управления

  • Очистка всех пользовательских меток
  • Цветовая индикация типов объектов

Цветовая схема

  • 🔵 Синий: Системные объекты
  • 🟢 Зеленый: Пользовательские объекты
  • 🔴 Красный: Кнопка удаления
  • 🟠 Оранжевый: Кнопка очистки всех

Автоматизация

При добавлении новой метки

  1. Метка автоматически добавляется в список
  2. Автоматически выбирается в слайдере
  3. Карта перемещается к новой метке

При удалении метки

  1. Метка удаляется из списка
  2. Индекс автоматически корректируется
  3. UI обновляется

Совместимость

  • Android: Полная поддержка всех функций
  • ⚠️ iOS: Базовая поддержка через общие методы
  • Web: Поддержка через общие методы

Отладка

Проблемы с навигацией

  1. Проверьте, что объекты существуют в списке
  2. Убедитесь, что индекс не выходит за границы
  3. Проверьте callback moveToSelectedObject

Проблемы с отображением

  1. Проверьте состояние MapScreenMutableState
  2. Убедитесь, что getAllObjectsForSlider возвращает корректные данные
  3. Проверьте UI компоненты на корректность

Примеры использования

Программная навигация

// Переход к следующему объекту
val nextIndex = (currentIndex + 1) % totalObjects
mapScreenMutableState.setSelectedObjectIndex(nextIndex)
mapScreenMutableState.moveToSelectedObject(placemarks)

Получение всех объектов

val allObjects = mapScreenMutableState.getAllObjectsForSlider(placemarks)
val selectedObject = allObjects[selectedIndex]

Автоматический выбор нового объекта

// При добавлении новой метки
mapScreenMutableState.addCustomPlacemark(newPlacemark, placemarks)
// Автоматически выбирается и перемещается к нему

Будущие улучшения

  1. Фильтрация: Поиск и фильтрация объектов
  2. Группировка: Категории объектов
  3. Закладки: Сохранение избранных объектов
  4. Экспорт: Сохранение списка объектов
  5. Статистика: Анализ объектов на карте
  6. Кластеризация: Группировка близких объектов