Comments 23
>>Оказалось, что градиент не поддерживается!
При этом выше у вас нарисован скат с градиентом.
И какие-то минусы у вас неоднозначные.
>>Картинки масштабируются только пропорционально.
Почему?
>>Не поддерживается прозрачность.
Это еще почему? Сам по себе svg поддерживает прозрачность. Проблема конкретного выбранного отрисовщика? Или прозрачность в загруженных PNG файлах?
>>Нежелательно использовать тени и сечения, так как это в разы увеличивает размер SVG-файлов.
Погодите, что-то не сходится. Во первых для свечения можно было применять градиент, во-вторых — фильтры.
Как дела с производительностью, не просела?
При этом выше у вас нарисован скат с градиентом.
И какие-то минусы у вас неоднозначные.
>>Картинки масштабируются только пропорционально.
Почему?
>>Не поддерживается прозрачность.
Это еще почему? Сам по себе svg поддерживает прозрачность. Проблема конкретного выбранного отрисовщика? Или прозрачность в загруженных PNG файлах?
>>Нежелательно использовать тени и сечения, так как это в разы увеличивает размер SVG-файлов.
Погодите, что-то не сходится. Во первых для свечения можно было применять градиент, во-вторых — фильтры.
Как дела с производительностью, не просела?
+3
Проблема с градиентом была решена, об этом в статье рассказывается. Скат показывает уже результат
Проблема масштабирования и альфа — это проблема данной конкретной реализации библиотеки, но так как альтернатив нет — мы использовали её.
Спасибо за подсказку по поводу свечений. Мы описали то, с чем столкнулись. Художник сделал нам изображение с тенью в таком виде, и мы с ним работали
На производительности использование svg практически не сказалась. Проблема долгой загрузки и её решение описаны в статье
Проблема масштабирования и альфа — это проблема данной конкретной реализации библиотеки, но так как альтернатив нет — мы использовали её.
Спасибо за подсказку по поводу свечений. Мы описали то, с чем столкнулись. Художник сделал нам изображение с тенью в таком виде, и мы с ним работали
На производительности использование svg практически не сказалась. Проблема долгой загрузки и её решение описаны в статье
+2
UFO just landed and posted this here
Какое устройство? Если у вас 4 гигалошади под капотом, то загрузка и ресайзы кучи PNG размерами в 3-4 мегапикселя будут идти те же несколько секунд.
P.S. Правки SVG парсера неплохо бы выложить на github, все-таки ведь GPL лицензия.
P.S. Правки SVG парсера неплохо бы выложить на github, все-таки ведь GPL лицензия.
+5
Спасибо за статью, может когда пригодится.
А вы изменения после оптимизации не коммитнули? Не перенесли проект на github?
А вы изменения после оптимизации не коммитнули? Не перенесли проект на github?
+1
Это был наш первый опыт с этой библиотекой, и изменения носят очень локальный характер для сугубо наших целей. Но мы и дальше будем использовать эту библиотеку, и тогда уже будем рады поделиться нашими наработками.
+1
Локальные изменения можно не выкладывать только если вы не распространяете приложение или компонент. Похоже в вашем случае факт распространения имеет место быть. А соответственно нужно или влить изменения в исходный проект, или выложить изменённую версию.
P.S. Заранее извиняюсь, если что-то напутал.
P.S. Заранее извиняюсь, если что-то напутал.
+4
Здорово, надо будет ваш метод попробовать.
Сам я уже пробовал использовать AndEngineSVGTextureRegionExtension, вроде бы как получалось, но так много фишек не реализовано.
Я рисовал сам графику в Inkscape, но потом еще немного оптимизировал код svg (там есть много мусора, который ни на что не влияет). Более простые элементы типа кнопок, бордюров так вообще мне было проще написать ручками :)
Сам я уже пробовал использовать AndEngineSVGTextureRegionExtension, вроде бы как получалось, но так много фишек не реализовано.
Я рисовал сам графику в Inkscape, но потом еще немного оптимизировал код svg (там есть много мусора, который ни на что не влияет). Более простые элементы типа кнопок, бордюров так вообще мне было проще написать ручками :)
+1
Я начал подходить к этой же задаче несколько с другой стороны — генерировать ресурсы из SVG при сборке. Это, конечно, ограничивает область применения (во время выполнения программы нельзя изменять размеры/цвета/...), но зато и проблем с отображением меньше, так как для растеризации используется достаточно мощная библиотека Batik.
Проект доступен на https://github.com/kriomant/buketan
Пока возможностей не слишком много, но если кого заинтересует, то продолжу развитие.
Проект доступен на https://github.com/kriomant/buketan
Пока возможностей не слишком много, но если кого заинтересует, то продолжу развитие.
+1
Интересовался подобной темой, но отрисовка SVG занимает больше времени и сжирает больше ресурсорв (батарея садится быстрее). Имхо, проще брать изображения высокого разрешения, а при первом запуске ресайзить и сохранять на SD под активное разрешение.
0
UFO just landed and posted this here
Речь шла именно о формате svg basic 1.1, именно его понимает первая версия библиотеки и кантинки из inkscape, увы, не отображались. Во второй это исправили и всё пошло хорошо.
Вы правильно говорите — все изображения от художника пришли именно из Adobe Illustrator. Обязательно учтем ваши советы по поводу подсветки на будущее, и будем экспериментировать!
Попоробовали добавить этот тэг — к сожалению, не помогло. Видимо это пока не поддерживается на уровне библиотеки. Возможно попробуем сами в будущем расширить этот функционал. Спасибо за подсказки!
Вы правильно говорите — все изображения от художника пришли именно из Adobe Illustrator. Обязательно учтем ваши советы по поводу подсветки на будущее, и будем экспериментировать!
Попоробовали добавить этот тэг — к сожалению, не помогло. Видимо это пока не поддерживается на уровне библиотеки. Возможно попробуем сами в будущем расширить этот функционал. Спасибо за подсказки!
+1
Как вы думаете, а почему Google ввел именно механизм разделения ресурсов для разных DPI? Почему они (в Google) не написали библиотеку изначально в фреймворке которая берет все из SVG? Скорее всего от того что это меньшее зло (производительность выше). И наверное возможности у PNG как формата передачи изображения, все же выше =), потом еще найнпач, очень удобно.
А если вам приходится масштабировать элементы интерфейса, так это скорее проблема дизайна приложения.
В любом случае, спасибо за «наводку».
А если вам приходится масштабировать элементы интерфейса, так это скорее проблема дизайна приложения.
В любом случае, спасибо за «наводку».
+2
есть еще вариант использовать иконочные шрифты, это вроде как проще и производительнее
0
делали что то подобное, у svg формата есть проблема:
— это слабый набор инструментария/библиотек, код буквально приходится «допиливать», это усложняет внесение каких-либо правок. Например:
желаете трансформации по применять — писать скрипт,
мусор после экспорта — чистить, одними скриптами не обойтись,
а качество и количество библиотек оставляет желать лучшего.
Процесс оптимизации можно слегка автоматизировать — мы используем это: svgo.
— это слабый набор инструментария/библиотек, код буквально приходится «допиливать», это усложняет внесение каких-либо правок. Например:
желаете трансформации по применять — писать скрипт,
мусор после экспорта — чистить, одними скриптами не обойтись,
а качество и количество библиотек оставляет желать лучшего.
Процесс оптимизации можно слегка автоматизировать — мы используем это: svgo.
+1
Когда только изучал разработку под Android, сильно удивился, что нет штатного средства для работы с векторной графикой (при наличии неудобного спецэфичного редактора интерфейса). И, видимо, ничего не изменилось.
Автору и всем остальным, кто выкладывал ссылки на инструменты, с которыми приходилась работать, огромное спасибо! Сейчас все больше поглядываю на Android в плане разработки.
Автору и всем остальным, кто выкладывал ссылки на инструменты, с которыми приходилась работать, огромное спасибо! Сейчас все больше поглядываю на Android в плане разработки.
+1
UFO just landed and posted this here
Спасибо за подсказку с Build.VERSION — что-то совсем забыл про это.
По поводу target sdk — у нас детское приложение, и нативных элементов там практически нет. Так что это не критично, а вот охватить как можно больше устройств — это предпочтительно, поэтому min у нас даже на 7 стоит.
Исходников нам нисколько не жалко, что вы! Просто как я писал выше — изменения довольно специфичны для нас. Ну кому еще может понадобится загружать изображение с заранее наложенным цветовым фильтром? (в статье кстати описано, как мы это сделали). Вот если бы делать такое с уже загруженными… Вот как сделаем — зальем!
Ну а по поводу ускорения — класс SVGParser, метод parse. Убираем первый проход парсера:
Но тут надо быть осторожным. Это сейчас он работает только с xlink(я писал в статье), я боюсь, что дальше библиотека будет расширена для поддержки других фич.
По поводу target sdk — у нас детское приложение, и нативных элементов там практически нет. Так что это не критично, а вот охватить как можно больше устройств — это предпочтительно, поэтому min у нас даже на 7 стоит.
Исходников нам нисколько не жалко, что вы! Просто как я писал выше — изменения довольно специфичны для нас. Ну кому еще может понадобится загружать изображение с заранее наложенным цветовым фильтром? (в статье кстати описано, как мы это сделали). Вот если бы делать такое с уже загруженными… Вот как сделаем — зальем!
Ну а по поводу ускорения — класс SVGParser, метод parse. Убираем первый проход парсера:
// IDHandler idHandler = new IDHandler();
// xr.setContentHandler(idHandler);
// xr.parse(new InputSource(cin.getCopy()));
// svgHandler.idXml = idHandler.idXml;
Но тут надо быть осторожным. Это сейчас он работает только с xlink(я писал в статье), я боюсь, что дальше библиотека будет расширена для поддержки других фич.
+2
Sign up to leave a comment.
Используем векторные изображения SVG в приложениях Android, или как убить фрагментацию экранов и не потерять в качестве (плюсы, минусы, особенности)