Pull to refresh

Comments 23

>>Оказалось, что градиент не поддерживается!
При этом выше у вас нарисован скат с градиентом.
И какие-то минусы у вас неоднозначные.
>>Картинки масштабируются только пропорционально.
Почему?
>>Не поддерживается прозрачность.
Это еще почему? Сам по себе svg поддерживает прозрачность. Проблема конкретного выбранного отрисовщика? Или прозрачность в загруженных PNG файлах?
>>Нежелательно использовать тени и сечения, так как это в разы увеличивает размер SVG-файлов.
Погодите, что-то не сходится. Во первых для свечения можно было применять градиент, во-вторых — фильтры.

Как дела с производительностью, не просела?
Проблема с градиентом была решена, об этом в статье рассказывается. Скат показывает уже результат

Проблема масштабирования и альфа — это проблема данной конкретной реализации библиотеки, но так как альтернатив нет — мы использовали её.

Спасибо за подсказку по поводу свечений. Мы описали то, с чем столкнулись. Художник сделал нам изображение с тенью в таком виде, и мы с ним работали

На производительности использование svg практически не сказалась. Проблема долгой загрузки и её решение описаны в статье
Дефолтное свечение в иллюстраторе — растровая картинка.
UFO just landed and posted this here
Спасибо за подсказки, будем пробовать. О результатах напишем. Как я написал в комментрии выше, у нас изображения пришли готовые от художника, и использовали то, что имели.
Какое устройство? Если у вас 4 гигалошади под капотом, то загрузка и ресайзы кучи PNG размерами в 3-4 мегапикселя будут идти те же несколько секунд.

P.S. Правки SVG парсера неплохо бы выложить на github, все-таки ведь GPL лицензия.
А разве GPL совместима с гугловским маркетом?
Спасибо за статью, может когда пригодится.

А вы изменения после оптимизации не коммитнули? Не перенесли проект на github?
Это был наш первый опыт с этой библиотекой, и изменения носят очень локальный характер для сугубо наших целей. Но мы и дальше будем использовать эту библиотеку, и тогда уже будем рады поделиться нашими наработками.
Локальные изменения можно не выкладывать только если вы не распространяете приложение или компонент. Похоже в вашем случае факт распространения имеет место быть. А соответственно нужно или влить изменения в исходный проект, или выложить изменённую версию.
P.S. Заранее извиняюсь, если что-то напутал.
Здорово, надо будет ваш метод попробовать.
Сам я уже пробовал использовать AndEngineSVGTextureRegionExtension, вроде бы как получалось, но так много фишек не реализовано.
Я рисовал сам графику в Inkscape, но потом еще немного оптимизировал код svg (там есть много мусора, который ни на что не влияет). Более простые элементы типа кнопок, бордюров так вообще мне было проще написать ручками :)
Я начал подходить к этой же задаче несколько с другой стороны — генерировать ресурсы из SVG при сборке. Это, конечно, ограничивает область применения (во время выполнения программы нельзя изменять размеры/цвета/...), но зато и проблем с отображением меньше, так как для растеризации используется достаточно мощная библиотека Batik.

Проект доступен на https://github.com/kriomant/buketan
Пока возможностей не слишком много, но если кого заинтересует, то продолжу развитие.
Интересовался подобной темой, но отрисовка SVG занимает больше времени и сжирает больше ресурсорв (батарея садится быстрее). Имхо, проще брать изображения высокого разрешения, а при первом запуске ресайзить и сохранять на SD под активное разрешение.
Может взять SVG-изображение, отрендерить в png (чтобы в качестве не терять) под текущее устройство и сохранить на sd? Или это сложно? Я сам в этой теме не селен.
UFO just landed and posted this here
Речь шла именно о формате svg basic 1.1, именно его понимает первая версия библиотеки и кантинки из inkscape, увы, не отображались. Во второй это исправили и всё пошло хорошо.

Вы правильно говорите — все изображения от художника пришли именно из Adobe Illustrator. Обязательно учтем ваши советы по поводу подсветки на будущее, и будем экспериментировать!

Попоробовали добавить этот тэг — к сожалению, не помогло. Видимо это пока не поддерживается на уровне библиотеки. Возможно попробуем сами в будущем расширить этот функционал. Спасибо за подсказки!
Как вы думаете, а почему Google ввел именно механизм разделения ресурсов для разных DPI? Почему они (в Google) не написали библиотеку изначально в фреймворке которая берет все из SVG? Скорее всего от того что это меньшее зло (производительность выше). И наверное возможности у PNG как формата передачи изображения, все же выше =), потом еще найнпач, очень удобно.

А если вам приходится масштабировать элементы интерфейса, так это скорее проблема дизайна приложения.

В любом случае, спасибо за «наводку».
есть еще вариант использовать иконочные шрифты, это вроде как проще и производительнее
UFO just landed and posted this here
делали что то подобное, у svg формата есть проблема:
— это слабый набор инструментария/библиотек, код буквально приходится «допиливать», это усложняет внесение каких-либо правок. Например:
желаете трансформации по применять — писать скрипт,
мусор после экспорта — чистить, одними скриптами не обойтись,
а качество и количество библиотек оставляет желать лучшего.
Процесс оптимизации можно слегка автоматизировать — мы используем это: svgo.
Когда только изучал разработку под Android, сильно удивился, что нет штатного средства для работы с векторной графикой (при наличии неудобного спецэфичного редактора интерфейса). И, видимо, ничего не изменилось.

Автору и всем остальным, кто выкладывал ссылки на инструменты, с которыми приходилась работать, огромное спасибо! Сейчас все больше поглядываю на Android в плане разработки.
UFO just landed and posted this here
Спасибо за подсказку с Build.VERSION — что-то совсем забыл про это.

По поводу target sdk — у нас детское приложение, и нативных элементов там практически нет. Так что это не критично, а вот охватить как можно больше устройств — это предпочтительно, поэтому min у нас даже на 7 стоит.

Исходников нам нисколько не жалко, что вы! Просто как я писал выше — изменения довольно специфичны для нас. Ну кому еще может понадобится загружать изображение с заранее наложенным цветовым фильтром? (в статье кстати описано, как мы это сделали). Вот если бы делать такое с уже загруженными… Вот как сделаем — зальем!

Ну а по поводу ускорения — класс SVGParser, метод parse. Убираем первый проход парсера:
//			IDHandler idHandler = new IDHandler();
//			xr.setContentHandler(idHandler);
//			xr.parse(new InputSource(cin.getCopy()));
//			svgHandler.idXml = idHandler.idXml;

Но тут надо быть осторожным. Это сейчас он работает только с xlink(я писал в статье), я боюсь, что дальше библиотека будет расширена для поддержки других фич.
Sign up to leave a comment.