По душе · Android × Figma · 11.09.2026 · создание и управление событием
Сорок семь кадров секции «Создание события» — от пустой формы до созданного события. Форма с лентой обложек и барабаном даты, выбранное место с картой внутри карточки, теги чипами, блок «Доступ к событию» в пролистанном и полном виде со всплывающими списками и состояниями ошибки, два листа-модалки (поиск места на карте и списком, ввод тега со всеми исходами), страница созданного события с QR-кодом и экран «Управление». Каждый кадр собран из данных ноды и сведён с рендером Figma в масштабе ×3. По пути поправлена модель размытия, которая полтора десятка кадров назад была записана вдвое меньшей, чем надо.
Смотровая
Тяните шторку, чтобы совместить макет и приложение. «Карта» показывает, где остаётся расхождение: синим закрыт системный статус-бар — его рисует система, в сравнении он не участвует (спека 6.4). Кадры формы выше экрана: от 1234 до 1723 dp, снимаются полосами по 844 и склеиваются.
Числа
Полное — доля пикселей, отличающихся сильнее ΔE 6 вне масок. Без текста — то же с исключёнными текстовыми блоками. ±1 px — пиксель считается расхождением, только если не совпал ни с одним пикселем рендера в окне ±1: сдвиг растра на долю пикселя не есть ошибка вёрстки. Геометрия — два последних вместе, то есть чистая форма, положение и материал; по ней и выносится вердикт. Подсвечены строки выше порога — у каждой измеренная причина в разделе «Границы».
| Экран | Кадр | Состояние | Полное % | Без текста % | ±1 px % | Геометрия % | Шкала до порога 0,3 % |
|---|
Разбор
Каждая строка — расхождение из реестра docs/figma/fig/ledger.md:
что показала нода, что делало приложение и сколько это стоило в числах.
Самая дорогая находка десятка, и она задним числом чинит метод. У обложки-заглушки
нового события три размытых эллипса бренда с LAYER BLUR 400, 400 и 200. Я
нарисовал их с половиной радиуса — так было записано в заметках — и получил в левом верхнем
углу насыщенный синий там, где в рендере бледно-голубой. С полным радиусом профили по
столбцу x = 60 и по строке y = 200 сходятся с рендером до 1…6 уровней
канала. Проверка по уже закрытому свечению карты: узел 229:18754 объявляет
112,2257 — ровно то число, что стоит в коде с самого начала. Значит половина была ошибкой
записи, а не модели.
На пяти кадрах блок «Доступ к событию» показан у нижнего края экрана. В ноде это не
скролл: у Main Content стоит primaryAxisAlignItems: MAX, и
содержимое, которое выше кадра, уходит за верхний край и обрезается самим узлом —
первая плитка обложки стоит на y = −752 при 156 у непролистанной формы. В Compose
это сдвиг колонки на разницу и clipToBounds у подложки; фиксированная высота
контейнера, наоборот, ужимает детей, и форма уезжала на 70 dp вверх.
Карточка карты — тот же узел, что на «Странице События», и там у него белая обводка
1 INSIDE и две тени. Внутри карточки места effects и strokes
пусты. Разница заметна только снизу, где карта лежит на собственной подсветке: обводка
давала полосу 312×3 dp у нижнего края (замер столбца x = 100: рендер
185, 247, 228 против снимка 225, 252, 242), тень — градиент
217 → 232 под карточкой. Пара «нода → нода» ушла дизайнеру.
Карта во весь лист — окно исходника 717×1213 на 406×687 dp, то есть увеличение
почти втрое. Любое сглаживающее увеличение размазывает тонкие линии дорог на два пикселя, и
метрика, которая прощает сдвиг ровно на один, считает их расхождением. Перебор фильтров:
Lanczos 0,421 %, Bicubic 0,394, Hamming 0,345 и 0,295 без
сглаживания. Сам сдвиг растра (−8 dp, узел висит левее кадра) нашёлся перебором
совмещений — для этого появился tools/shift.py.
У группы кнопок масштаба на карте объявлена сплошная белая заливка, и по рендеру кнопки
выглядят почти непрозрачными. Но режим наложения у этой заливки —
MULTIPLY: умножение на белое не меняет ничего. Со сплошной подложкой
«геометрия» кадра пошла 0,424 → 1,098 %; видимая плотность даётся только
стеклом кита.
Порядок читается только из дерева: строка-поле стоит на y = 1042, ряды чипов — на 1102. Собранный «как кажется» экран давал решётку тёмной там, где в рендере она светло-серая, и наоборот. Заодно нашлось, что у решётки и крестика внутри чипа обводка text-secondary 40 %, а не цвет метки.
Фон «Страницы События» — фотография под BACKGROUND BLUR 500; такой
радиус Compose не тянет, поэтому подложка печётся растром заранее. У кадра ростом 1234 то же
окно растра растянуто иначе, чем у 844, — нужен свой файл. И печь его надо без
затемнения: чёрный 32 % рисует сам экран отдельным слоем, а с двойным затемнением
«геометрия» кадра шла 49,9 %.
Код в листе — булева операция без растра. Контур вынут из .fig тем же
инструментом, что и иконки, и лёг в векторный ресурс; цвет #342D35 задаётся на месте
применения. Логотип в середине — окно imageTransform 100×100 под белым
квадратом 126×125.
Белый лист, альфа-маска градиентом, три размытых эллипса бренда, шахматная текстура под
маской из двух кругов на прозрачности 0,4, «фотография» из четырёх контуров и три звезды —
всё из дерева кадра. Маска здесь отдельная находка: прямоугольник
Rectangle 1925 помечен isMask и гасит всё, что ниже него,
вертикальным градиентом от 0,7308 до 1,0 своей высоты.
Карточка одной строки в форме высотой 48 при самой строке 52 — строка выходит за
карточку на 2 dp сверху и снизу; у карты внутри карточки места нет теней и обводки,
хотя на «Странице События» тот же узел их имеет; кнопки листа тегов Disabled на двух кадрах
и Default на двух других при одинаковом состоянии ввода; кадры «Управление»
688:61525 и 688:61644 — полные копии, различие только в долях
пикселя в положении меток. Все кадры воспроизведены как есть (К-14).
Границы
Единственный кадр десятка выше 0,3 % — не новый экран, а инстанс уже закрытого мастера: он несёт его остаток слово в слово.
| Кадры | Геометрия % | Класс остатка |
|---|---|---|
688:46481 | 0,530 | точная копия мастера «Страницы Карта» 180:8884 — тот же остаток растра карты, что и у самого мастера (0,530), и те же четыре числа до третьего знака |