Comments 13
А можно сравнение по производительности и памяти с обычными картинками? И что с 9path?
9path — это (если не изменяет память) просто тянущиеся растровые картинки, они не масштабируются как векторные, а «тянутся».
Сравнение по производительности и памяти с обычными картинками – это тема для отдельной статьи, буду рад ее прочитать :) Рискну предположить, что с вектором все заметно лучше, чем с растром, во всяком случае ощущения, что приложение стало работать медленнее после перехода на вектор, не возникло, скорее наоборот.
9-patch поддерживается только для PNG.
9-patch поддерживается только для PNG.
Вектор еще нужно в растр переводить, а растр уже готов для отрисовки. Потому вектор аж никак не может быть быстрее растра, вопрос только, насколько он медленнее.
Вы забыли только, что PNG тоже декодировать надо, и не известно, что быстрее.
На самом деле чаще всего для отрисовки векторных изображений используется триангуляция и превращение векторных «путей» в 3д меши, которые рисуются напрямю видеокартой без текстур (крашеные вершины) или с простой лукап текстуркой с однопиксельными цветными квадратиками. Причём триангулировать и сохранять полученный результат можно заранее, например во время сборки приложения.
К сожалению, я не знаком с принципом работы VectorDrawable на Android, и не берусь утверждать что там это работает именно так. Но этот принцип триангуляции достаточно широко используется в сфере разработки игр, где такой подход позволяет сэкономить размер билда, не уменьшая при этом производительность отрисовки.
Я это собственно к тому, что по скорости отрисовки нельзя однозначно сказать, какой способ быстрее. Всё зависит от конкретного случая.
К сожалению, я не знаком с принципом работы VectorDrawable на Android, и не берусь утверждать что там это работает именно так. Но этот принцип триангуляции достаточно широко используется в сфере разработки игр, где такой подход позволяет сэкономить размер билда, не уменьшая при этом производительность отрисовки.
Я это собственно к тому, что по скорости отрисовки нельзя однозначно сказать, какой способ быстрее. Всё зависит от конкретного случая.
Если брать VectorDravable из Android 5.0+ то там все векторные изображения кешируются. Так что существенного изменения производительности быть не должно.
На счет 9-patсh. Возможно вам поможет статья Программное создание NinePatchDrawable которую я написал пол года назад. К сожалению, в настоящее время у меня нет проектов, где можно было бы это использовать, так что библиотека из статьи пока не развивается.
На счет 9-patсh. Возможно вам поможет статья Программное создание NinePatchDrawable которую я написал пол года назад. К сожалению, в настоящее время у меня нет проектов, где можно было бы это использовать, так что библиотека из статьи пока не развивается.
«Легко… Часть 1 из 2.» Не так уж и легко, если пришлось на части делить.) Пожалуй, я лучше останусь со своими мэйкфайлами, которые автоматически генерируют «нарезку» из SVG:
Makefile
include make.rules
sport_icons = sport_running sport_biking sport_generic
icons: $(call iconset,$(sport_icons) )
icons_clean:
rm -fv $(call iconset,$(sport_icons) )
make.rules
Хотя, конечно, нормальная поддержка SVG в Android — моя давняя мечта.formats = xhdpi hdpi mdpi ldpi
iconset = $(foreach icon_name,$(1),$(addprefix res/drawable-,$(addsuffix /$(icon_name).png,$(formats))))
res/drawable-xhdpi/%.png: images/%.svg
mkdir -p res/drawable-xhdpi
inkscape -e $@ -C -w 96 -h 96 $<
res/drawable-hdpi/%.png: images/%.svg
mkdir -p res/drawable-hdpi
inkscape -e $@ -C -w 72 -h 72 $<
res/drawable-mdpi/%.png: images/%.svg
mkdir -p res/drawable-mdpi
inkscape -e $@ -C -w 48 -h 48 $<
res/drawable-ldpi/%.png: images/%.svg
mkdir -p res/drawable-ldpi
inkscape -e $@ -C -w 36 -h 36 $<
Все решают эти проблемы по-разному: кто-то пытается подключить SVG-библиотеку к проекту, кто-то генерирует нарезку с помощью утилиты.
А ещё есть Gradle плагин от Trello, генерирующий png drawables во время сборки проекта, и обещают в Android Gradle plugin версии 1.4 прикрутить официальную поддержку генерации png.
Sign up to leave a comment.
Легко переходим на векторный формат картинок вместо нарезки под разные плотности экранов в Android 4.0+. Часть 1 из 2