Yandex Cup 2024 semi-final task
Необходимо реализовать следующие компоненты:
-
Холст — рабочую область для рисования с «бумажным» фоном (картинку необходимо взять из макетов), распознающую действия рисования пользователя. На холстах второго и последующих кадров должен отображаться полупрозрачный эскиз соответствующего предыдущего кадра. При этом такой эскиз не должен являться частью рисунка нового кадра.
- Инструменты рисования: карандаш, который оставляет на холсте следы выбранного цвета, следуя за пальцем, и ластик, который стирает эти следы с холста, также следуя за движением пальца.
- ✅ Сделано
-
Контроль изменения цвета рисования с возможностью выбора как минимум из 3 разных цветов.
- ✅ Сделано
-
Кнопки отмены и возврата последнего действия. Для карандаша и ластика под действием подразумевается непрерывная линия, нанесённая на холст без отпускания пальца.
- ✅ Сделано
-
Кнопку создания следующего кадра. При её нажатии текущий кадр сохраняется для последующего воспроизведения, а на экране появляется чистый холст.
- ✅ Сделано
-
Кнопку удаления текущего кадра, которая возвращает пользователя к рисованию предыдущего кадра.
- ✅ Сделано
-
Запуск и остановку воспроизведения анимации. При старте воспроизведения необходимо выключить или скрыть все элементы управления, кроме холста, на котором воспроизводятся кадры, а также кнопки остановки воспроизведения. Разумеется, любое изменение изображения во время воспроизведения запрещено. Анимация должна воспроизводиться зацикленно, а при остановке анимации необходимо вернуться к последнему кадру.
- ✅ Сделано. Но во время воспроизведения отображается контрол для управления скоростью анимации и кнопка экспорта, чтобы сделать удобным такой флоу: рисование → просмотр и настройка анимации → экспорт.
-
Генерация и добавление N случайных кадров. Содержание холстов отдаётся на усмотрение участников — к примеру, это может быть генерация различных геометрических фигур или перемещение одной готовой фигуры. Изображения на сгенерированных кадрах должны явно отличаться друг от друга. Количество кадров должно задаваться вводом числа N с размерностью Integer в интерфейсе приложения непосредственно перед генерацией. Сгенерированные кадры добавляются за последним кадром и ведут себя идентично кадрам, добавленным вручную: допускается удаление кадров, изменение последнего кадра и т. д.
- ✅ Сделано. Только я решил добавлять кадры не за последним кадров в коллекции, а за текущим выбранным кадром, чтобы была возможность сгенерировать кадры на основе выбранного.
-
Панель либо экран с раскадровкой для переключения между добавленными кадрами. Также допускается реализовать переключение кадров свайпами влево и вправо от края экрана.
- ✅ Сделано
-
Кнопка дублирования кадра — создаёт новый кадр и копирует на него всё содержимое текущего кадра.
- ✅ Сделано
-
Возможность удаления всех кадров сразу.
- ✅ Сделано. Лонг-тап по кнопке "удалить"
-
Настройка скорости воспроизведения анимации.
- ✅ Сделано. Показывается во время запуска анимации.
-
Экспорт анимации в GIF с возможностью поделиться файлом.
- ✅ Сделано. Показывается во время запуска анимации.
-
Выбор кастомного любого цвета рисования из RGB-палитры.
- ✅ Сделано
-
Инструмент рисования геометрических фигур, прямых линий или кривых Безье (минимум 3 разных фигур), а также взаимодействие с фигурами: увеличение растягиванием или pinch to zoom, перемещение, поворот.
- ✅ Сделано
-
Изменение толщины карандаша и ластика.
- ✅ Сделано. Нужно повторно нажать на выбранный инструмент
-
Реализация стека действий для многократной отмены или возврата.
- ✅ Сделано. На каждом слое свой стек.
-
Увеличение холста при помощи жеста pinch-to-zoom для точной прорисовки деталей изображения.
- ✅ Сделано
-
Иконка приложения.
- ✅ Сделано
-
Полноценная поддержка светлой и тёмной тем.
- ✅ Сделано