- Векторная анимация в Андроид (Часть первая)
- Вектор на Андроид?
- Готовим вектор под андроид
- Конвертация SVG в XML
- Легко переходим на векторный формат картинок вместо нарезки под разные плотности экранов в Android 4.0+. Часть 2 из 2
- SVG to VectorDrawable Converter
- Установка зависимостей
- Если у Вас Windows
- Microsoft .NET Framework
- Inkscape
- Если у Вас OS X
- Inkscape
- Преобразование файла SVG в Android Vector Drawable XML с сохранением структуры группы на месте
- 4 ответа
- Обновление 2019: нет необходимости использовать какой-либо внешний инструмент или Heck, как указано в старых ответах. Asset Studio от Android Studio позволяет конвертировать SVG / PSD в векторы
- How to Import SVG & PSD Icons as XML Drawables into Android Studio
- To Import SVG and PSD resources into Android Studio using Vector Asset Tool, follow the below steps.
- Android working with SVG / vector drawables
- 1. What is VectorDrawable?
- 2. Creating Android Project
- 2.1 Creating VectorDrawable from Material Icons.
- 2.2 Creating VectorDrawable from SVG or PSD
- 3. Using VectorDrawable
- 3.1 Using VectorDrawable with ImageView from xml
- 3.2 Using VectorDrawable with ImageView from Java
- 3.3 Using VectorDrawable as Drawable with TextView
- 3.4 Using VectorDrawable to Customise RadioButton
Векторная анимация в Андроид (Часть первая)
Уже довольно давно в Андроиде существует возможность использовать векторные ресурсы вместо png нарезки. Такая возможность появилась с релизом Android 5.0 Lollipop и API 21. Для более ранних версий системы, мы можем использовать AppCompat (библиотека совместимости), благодаря которой статичный вектор будет работать с API 7 (Android 2.1), а анимированный с API 11 (Android 3.0 Honeycomb).
Векторные ресурсы, в отличие от обычной нарезки, занимают примерно в 10 раз меньше места. Нет необходимости адаптировать графику под разные плотности экранов. Кроме того, можно переиспользовать ресурс в разном контексте, размере и цвете.
Другим важным преимуществом является возможность добавить анимацию. Да, конечно, анимацию можно сделать и при использовании png — например спрайтовую, но такая анимация будет занимать в десятки раз больше места с учетом поддержки всех разрешений.
Вектор на Андроид?
Прежде чем приступить к созданию векторных ассетов, необходимо разобраться что из себя представляет вектор на Андроиде. Понимание структуры очень важно, так как в настоящий момент не существует инструментов для удобного создания и визуального контроля анимации.
К сожалению (или к счастью), в Андроиде нельзя использовать svg файлы напрямую, по крайней мере, без использования сторонних библиотек. Причина очень проста и состоит в том, что SVG формат очень комплексный и богатый на возможности и поддержка столь богатого функционала сложна и не целесообразна для таких простых вещей как иконки, ну и не стоит забывать о проблеме производительности и совместимости. Именно поэтому в андроиде используют более простой формат, который, тем не менее, во многом похож на svg.
Векторная графика представлена в виде двух классов VectorDrawable и AnimatedVectorDrawable. Из названия классов понятно, что первый отвечает за статичный вектор, а второй за его анимацию. Классы описываются обычным XML ресурсом.
Для начала рассмотрим VectorDrawable, который имеет следующую структуру:
В элементе содержатся параметры высоты и ширины объекта. Внутри есть элемент который может содержать в себе элементы
и а так же другие группы. В параметрах элемента указывается информация о трансформации (смещении, масштабе и угле) и имени которое мы будем использовать для применения анимации. Элементы
и описывают геометрию и цвет объекта.
Для того чтобы добавить анимацию мы используем класс ObjectAnimator который просто применяем на объекты VectorDrawable. Мы можем применять анимацию как к общей группе так и к конкретному
. Анимация может представлять собой простую манипуляцию параметрами объекта так и сложный морфинг.
Раньше для реализации анимации в приложении необходимо было использовать как минимум 3 xml файла: 1 файл для VectorDrawable который необходимо анимировать, другой для аниматора описывающего анимацию и последний файл — объединяющий непосредственно аниматор и VectorDrawable. Чем сложнее анимация, тем больше файлов необходимо создавать, что часто приводило к путанице.
На Google I/O 2016 был представлен новый формат — XML bundle. Он позволяет описывать векторную анимацию одним файлом.
По сути, мы всю необходимую информацию размещаем в AnimatedVectorDrawable. Собрать такой файл очень легко, на картинке выделены куски, которые просто вырезаются из соответствующих ресурсов и вставляются между специальными aapt тэгами.
Готовим вектор под андроид
Для начала нам нужен любой графический редактор, который умеет на выходе выдавать svg файл. К счастью, их великое множество: Photoshop, Illustrator, Sketch, Inkscape, Affinity Designer и т.д.
При создании векторного изображения нужно использовать самые базовые инструменты, так как тени и прочие фильтры просто не будут работать.
Для примера я сделал простую иконку замка и разделил её на два шейпа (группы) для последующей анимации. Сохраняем в svg и обязательно проверяем корректность экспорта. Очень часто проблемы возникают со stroke и от избыточной вложенности объектов. Как правило, старайтесь по максимуму объединять всё в один объект, а stroke переводить в shape(outline).
Конвертация SVG в XML
Есть несколько способов сделать конвертацию svg файла в xml.
Первый способ — это сделать всё руками. Это конечно, не очень удобно, но ничего сложного тут нет. Просто переносим куски из svg в xml используя правильные имена параметров. Ниже я выделил куски, которые практически полностью совпадают.
Второй способ — В Android Studio есть инструмент Vector Asset Studio, который позволяет автоматически выполнить перевод SVG файла в XML. Ресурсы можно выбирать из библиотеки иконок или указать свой SVG файл. Благодаря превью можно сразу оценить корректность экспорта. Есть полезные настройки.
Третий способ — это использовать онлайн инструменты, например http://inloop.github.io/svg2android/. Лично я предпочитаю именно его, так как в нем есть полезные настройки по оптимизации файла и самое главное — возможность выгрузить и забрать все пакетом. К сожалению, нет превью результата.
В первой части мы подробно рассмотрели структуру векторных ресурсов на андроид и способы конвертации ресурсов из svg в xml. В следующей части мы рассмотрим несколько способов работы с анимацией.
Ребята из Google проделали хорошую работу и постепенно делают работу с вектором все более удобной. Это безусловно подталкивает разработчиков к его большему распространению. Векторные ресурсы также легки в использовании как и их растровые аналоги и при этом дают массу таких преимуществ как: естественная поддержка любых плотностей экранов и возможность переиспользования изображения в различных размерах и цветах.
Все используемые материалы можно найти на GitHub: XML Bundle, Файлы замка.
Источник
Легко переходим на векторный формат картинок вместо нарезки под разные плотности экранов в Android 4.0+. Часть 2 из 2
В предыдущей части мы обсудили библиотеку BetterVectorDrawable, реализующую VectorDrawable для Android 4.0+.
В этой части речь пойдет о преобразовании изображений из SVG в vector drawable XML.
Когда Андроид читает XML-ресурсы, он игнорирует атрибуты, которые не поддерживаются текущим устройством. Это означает, что неподдерживаемые атрибуты в vector drawable XML придется продублировать в пространстве имен schemas.android.com/apk/res-auto , чтобы у BetterVectorDrawable была возможность их прочитать. Например:
При этом нужно дублировать только неподдерживаемые атрибуты (список можно посмотреть здесь; см. атрибуты без префикса android: ).
К счастью, все это для нас проделывает конвертер и нам не нужно даже задумываться об этом.
SVG to VectorDrawable Converter
Этот конвертер позволяет создавать vector drawable ресурсы как для Android 5.0+, так и для библиотеки BetterVectorDrawable. Это контролируется с помощью аргумента командной строки.
Конвертер является кроссплатформенным консольным приложением: его можно запустить на Windows или OS X. Для его работы требуется установить зависимости, об этом речь пойдет позже. Сам конвертер распространяется в виде архива с исполняемым файлом, который можно скачать здесь.
Архив нужно распаковать и, открыв консоль на Windows (терминал на OS X), сменить текущую директорию на директорию с конвертером.
Команда, запускающая конвертацию, выглядит так:
Опциональные параметры указаны в квадратных скобках (хотя используются без скобок):
- mono следует указать, если Вы запускаете конвертер на OS X
- —lib BetterVectorDrawable следует указать, если Вы хотите, чтобы в выходных XML были продублированы неподдерживаемые атрибуты, т.е. сконвертировать SVG в vector drawable XML для библиотеки BetterVectorDrawable, иначе конвертер создаст vector drawable ресурсы для Android 5.0+.
Остальные параметры, думаю, понятны и так; аргумент —help выводит их описания.
Установка зависимостей
Если у Вас Windows
Microsoft .NET Framework
Если у Вас Windows 8 или выше, то этот пункт можно пропустить.
В системе должен быть установлен .NET Framework 4.5+. Проверить версию установленного .NET Framework можно согласно этой инструкции. Скачать .NET Framework 4.5 можно здесь.
Inkscape
Inkscape – это бесплатный редактор векторной графики с открытым кодом. Установка под Windows не отличается от обычной установки программы. Скачать можно здесь.
Если у Вас OS X
Понадобиться OS X 10.7 или лучше.
Скачать Mono можно здесь. Установка у меня прошла без затруднений.
Inkscape
Inkscape – это бесплатный редактор векторной графики с открытым кодом. Для установки под OS X сначала потребуется установить XQuartz, после чего нужно перезапустить компьютер или выйти и снова войти в систему.
Скачать Inkscape можно здесь. Убедитесь, что после установки Inkscape свободно запускается. Мне потребовалось разблокировать его в System Preferences… → Security & Privacy → General. Нужно нажать Click the lock to make changes и разблокировать запуск Inkscape.
Если у Вас возникли затруднения, можно написать мне. О проблемах с конвертером лучше сообщать разработчикам в GitHub, добавив ссылку на проблемный SVG-файл.
Источник
Преобразование файла SVG в Android Vector Drawable XML с сохранением структуры группы на месте
Я хочу конвертировать SVG-файлы в Android Vector Drawable XML. Мне нужна структура SVG. Чтобы SVG группировала несколько элементов вместе, мне нужно, чтобы эта группировка также была отражена в Android Vector Drawable.
К сожалению, инструменты, которые я нашел для преобразования SVG в векторные Drawable, пытаются минимизировать размер файла таким образом, чтобы избавиться от существующей группировки в структуре файла.
Есть ли умный способ сделать преобразование, которое оставляет дерево группировки нетронутым?
4 ответа
Вы пробовали Shape Shifter? Он предназначен как программа, позволяющая легко анимировать векторы и svgs, но вы можете сразу импортировать .svg и экспортировать в Vector Drawable. Это должно сохранить структуру вашей группы (но я не даю никаких обещаний, поскольку я сам этого не сделал).
Обновление 2019: нет необходимости использовать какой-либо внешний инструмент или Heck, как указано в старых ответах. Asset Studio от Android Studio позволяет конвертировать SVG / PSD в векторы
- Щелкните правой кнопкой мыши папку приложения-> Новый векторный актив
- Выберите второй параметр в радиокнопке, чтобы создать вектор из локального файла, как показано на рисунке ниже.
- Нажмите на значок папки, чтобы загрузить локальный файл SVG, и он автоматически преобразует его в вектор:
Создайте пустой XML-файл. записать все атрибуты VectorDrawable, кроме pathdata. Откройте файл SVG в WordPad. Скопируйте pathdata и вставьте его в созданный вами xml-файл.
Пример XML-файла с такими же путевыми данными:
Примечание: «z» в конце pathdata удаляется, и строки были также переставлены мной вручную для лучшей читаемости.
Таким образом, вам придется конвертировать SVG в xml по одному и вручную.
Источник
How to Import SVG & PSD Icons as XML Drawables into Android Studio
Although there are some online tools available which convert SVG & PSD images into android XML. But those tools don’t work for all kinds of image resources. The best way is to import SVG & PSD icons as XML Drawables into Android projects using the Vector Asset Tool provided by Android Studio. When we import our SVG and PSD images using Vector Asset Tool, it automatically converts them into XML Drawable.
To Import SVG and PSD resources into Android Studio using Vector Asset Tool, follow the below steps.
1. From your left Project pane, choose Android View, expand app and then res folder
2. Right Click on res or drawable directory then -> New -> Vector Asset
Import SVG and PSD Images Using Vector Asset Tool in Android Studio
3. After the above steps, a popup window would come from where you can choose your SVG or PSD images, choose its name, set its size and can choose the directory where you want to import the XML resource file. The following screenshots are showing the popup.
Vector Asset Tool in Android Studio
Choose Directory to Import Drawable in Vector Asset Tool
After clicking on the Finish button, Android Studio will automatically convert SVG and PSD files into XML Drawables. You can access this Drawable anywhere in your project as you access other drawables. Like R.drawable.ic_fb or in layout files @drawable/ic_fb .
Thats it!! This is how you can Import SVG & PSD Icons into Android Studio. 🙂
You can also find other useful helping materials and tutorials in our Coding Articles & Tutorials Knowledge Base.
Источник
Android working with SVG / vector drawables
While developing Android Applications, supporting multiple resolutions are sometime nightmare to developers. Including multiple images for different resolutions also increases the project size. The solution is to use Vector Graphics such as SVG images. While Android does not support SVGs (Scalable Vector Graphics) directly, with the launch of Lollipop a new class was introduced called VectorDrawable, which allows designers and developers to draw assets in a similar fashion using only code.
Simply explained, vector graphics are a way of describing graphical elements using geometric shapes. They are particularly well suited to graphical elements created in packages such as Adobe Illustrator or Inkscape where simple geometric shapes may be combined in to much more complex elements.
1. What is VectorDrawable?
As the name implies, vector drawables are based on vector graphics, as opposed to raster graphics, vector graphics are a way of describing graphical elements using geometric shapes. It is similar to a SVG file. In Android Vector Drawable are created as XML files. Now there is no need to create different size image for mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi etc. We need only one vector file for multiple screen size devices. Also for older versions of Android that don’t support vector drawables, Vector Asset Studio can turn your vector drawables into different bitmap sizes for each screen density at runtime.
Here is the detailed information Vector Asset Studio.
Note: For this project I’m using gradle version 2.2, my suggession is to use 2.0+. However if you’re using gradle version below 2.0 then you’ll need to add some more code to the app level build.gradle file which I’ve mentioned below.
2. Creating Android Project
1. Create a new project in Android Studio from File ⇒ New Project and fill the project details.
2. Open build.gradle in app module, add the below line inside defaultConfig block.
So the complete build.gradle looks like
If you are using gradle version below 2.0 then use following
2.1 Creating VectorDrawable from Material Icons.
So let us start by creating VectorDrawables from Material Icons (Material Icons are the official icon set from Google that are designed under the material design guidelines, these icons are open source and are beautifully crafted, delightful, and easy to use in your web, Android, and iOS projects).
3. In the project Right click on the drawable directory
4. Go to New ⇒ Vector Asset
5. Click on the launcher icon to browse Material Icons
6. Select an icon and click on ok
7. Review the name of the file then click on next.
8. Now Vector Asset Studio will show the location about where the file is being saved, review it and click on finish.
9. The drawable folder will now consist of a newly created file (In my case ic_flight_takeoff)
below is the file code –
You can modify the width and height of the vector as per your requirement (by default it stays as 24dp), a vector may consist of one or more paths. A path may have many attributes among which fillColor and pathData are the most important. fillColor attribute defines the color of the path, it must be a color attribute (hash code in #aarrggbb, or may also point to a color resource). pathData defines the path shape. In this case I’ve modified the vector width, height and path fillColor.
2.2 Creating VectorDrawable from SVG or PSD
Now we have created vectorDrawable from Material Icon, what if we want a separate icon? We can create it from SVG or PSD, below are the procedure, but it also has some restrictions you can check out here – https://developer.android.com/studio/write/vector-asset-studio.html#PSD (though the restriction listed here for PSD, it applies to SVG also).
10. In the project Right click on the drawable directory
11. Go to New ⇒ Vector Asset
12. Click on the radio button saying “Local File (SVG, PSD)”
13. Click on the browse icon and navigate to your SVG or PSD file to select it
14. After selecting click ok
15. Verify the image in preview and click Next ⇒ Finish.
below is the file code generated from svg
3. Using VectorDrawable
We have successfully added VectorDrawables to the project, now it’s time to use them.
16. Open the layout file of main activity (activity_main.xml) and add the below xml. This layout contains shows how to use VectorDrawable with ImageView and other Views (as background) which is explained later in this tutorial.
The above layout generates a screen something like this.
3.1 Using VectorDrawable with ImageView from xml
So let us start with a simple ImageView, and even simpler by assigning the VectorDrawable to the ImageView through xml layout.
As you can see, we used app:srcCompat instead of android:src, so that the support library can do the rest to display the image seamlessly on all versions of android. (The support library converts VectorDrawables to raster graphics automatically on android versions below 5.0 – API 21, details are here). So it was that easy.
3.2 Using VectorDrawable with ImageView from Java
Now Let us do the same thing with Java code, i.e. assigning VectorDrawable to ImageView through Java Code.
17. Add another Vector Drawable (name it ic_android.xml) with the steps mention in section 2.1 or 2.2, you can also create a file with that name and paste the below code.
18. Open MainActivity.java and paste the below code.
Now, let me explain the code line by line.
19. For using VectorDrawable from java or to use it as background (in xml also) you need to intimate AppCompatDelegate to enable compat vector from resource. Below is the code for that.
20. Whenever you are going to use VectorDrawable from java or to use it as background (in xml also) remember to use AppCompatView instead of normal view, here I have used AppCompatImageView, please also refer to the layout we created before.
21. Now assign the VectorDrawable as src or background as you do it normally, AppCompat will take care of the rest.
22. We have added some flavors to it, We implemented OnClickListener on the ImageView to set random color filter on it, upon click.
3.3 Using VectorDrawable as Drawable with TextView
You may want to use VectorDrawable as background or as compound drawable with TextView, so below is an example.
As you can see from above code we have used a VectorDrawable in the drawableLeft attribute of android.support.v7.widget.AppCompatTextView, we can also do it from the java code using AppCompatTextView#setCompoundDrawables .
3.4 Using VectorDrawable to Customise RadioButton
So far the use was straightforward, what if you want to customise a RadioButton or CheckBox while using VectorDrawable? Now lets see that. If you go through the layout we created, once again then you can find that a RadioGroup which contains a series of AppCompatRadioButton, all the AppCompatRadioButtons there uses @drawable/radio_selector as background, below is the code for that.
As you can see this is a selector drawable as usual, the only difference is that it refers to VectorDrawables (vector image resources) instead of raster image resources. The remaining is taken care by android.support.v7.widget.AppCompatRadioButton itself as mentioned earlier (remember to use AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) for that also, even if you don’t consider backward compatibility).
The final output looks something like this.
I hope this article gave you a very good overview about Using Vector Drawables in Android. Feel free to ask any queries / doubts in comments section below.
Rivu Chakraborty is a Sr. Tech. Member of Institution of Engineers(India), Diploma holder Engineer in Computer Science. He is presently at MaxMobility Pvt. Ltd. as a Sr. Software Engineer (Android)
Источник