Можно ли использовать SVG в Android как drawable напрямую?
Ресурс VectorDrawable написан на XML-словаре Android: это элемент vector с областью просмотра (viewport), размерами отображения и контурами. Если переименовать logo.svg в logo.xml, эти элементы не появятся. В SVG заливки, обводки и трансформации называются иначе, а еще у него есть возможности, которые этот экспорт сознательно не принимает.
Для простой иконки интерфейса или плоской иллюстрации используйте конвертер SVG в Android. Он принимает загруженный SVG или один из ваших разблокированных результатов. Если у вас растровое изображение, сначала векторизуйте его, проверьте контуры и только потом экспортируйте. Конвертация в ресурс не запускает трассировку повторно и не снимает требование разблокировки с уже готового результата.
Небольшой пример, который можно повторить
Сохраните этот треугольник как triangle.svg и загрузите его. Задайте имя ресурса ic_triangle и длинную сторону 24 dp.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path fill="#fa643c" d="M12 2L22 22H2Z"/>
</svg>
В скачанном XML будет viewport 24 на 24, размеры отображения 24 dp и один контур. Оранжевая заливка станет цветом в формате Android, где альфа идет первой: #fffa643c. Положите ic_triangle.xml в app/src/main/res/drawable/. В разметке используйте android:src="@drawable/ic_triangle", а в коде приложения — соответствующий идентификатор drawable-ресурса.
Viewport описывает геометрию, а размеры в dp — задуманный размер drawable на экране. Прямоугольный SVG сохраняет пропорции: если выбрать длинную сторону 48 dp, он не растянется в квадрат. Имя ресурса начинается со строчной латинской буквы и может содержать строчные буквы, цифры и подчеркивания.
Что переживает конвертацию?
Конвертер поддерживает контуры и базовые геометрические фигуры, сплошные цвета, прозрачность заливки, совместимые стили обводки и оба правила заливки — nonzero и even-odd. Поддерживаемые трансформации он «запекает» в координаты контуров. Именно из-за заливки even-odd экспорт рассчитан на API 24 и новее: обертки совместимости для старых приложений он не создает.
Текст, градиенты, маски, обрезка (clipping), встроенные картинки и эффекты требуют отдельной подготовки. Переведите текст в кривые в своем векторном редакторе. Если трансформация масштабирует обводку по осям неодинаково, переведите такую обводку в контуры. Прозрачность группы может изменить вид перекрывающихся фигур, поэтому экспорт ее не принимает, а не применяет прозрачность к каждой фигуре отдельно, меняя картинку. Всё небезопасное, что было удалено, перечислено в результате.
Для детальной графики подходящим ресурсом может оказаться экспорт в PNG. Очень большое число контуров замедляет отрисовку, даже если формально файл векторный. Уберите лишние точки и проверьте иконку в реальном экранном размере.
Проверьте результат в приложении
Соберите ресурс в Android Studio и посмотрите его на светлом и темном фоне. Проверьте отверстия внутри букв, тонкие обводки, нужные цвета и прозрачность. Сравните оригинал и drawable в маленьких размерах — там мелкие детали заметнее всего. Успешная компиляция XML подтверждает, что ресурс принят, но окончательный вид определяют отрисовка на устройстве и настройки тонирования (tint) в вашем приложении.
Для иконки на экране запуска используйте генератор иконок приложений. У таких иконок есть требования к плотностям экрана и адаптивным слоям, которые обычный экспорт drawable не учитывает.