VectorDrawable – доступен ли он как-то для до-Lollipop версий Android?

Задний план

Я заметил, что Android теперь поддерживает какой-то векторный рисунок через класс под названием « VectorDrawable » (а также AnimatedVectorDrawable , BTW). Об этом я узнал, посмотрев, что нового в Android-Studio .

Интересно, будет ли это конец, когда нужно поместить несколько файлов в несколько папок ( mdpi , hdpi , xhdpi и т. Д.). Это было бы здорово и могло бы минимизировать размеры приложений в некоторых случаях.

Вопросы

Я хотел бы задать несколько вопросов относительно этого нового класса:

  1. Можно ли использовать его в старых версиях Android, возможно, через библиотеку даже библиотеки поддержки Google?

  2. Я не знаком с тем, как это работает, но может ли Lollipop обрабатывать SVG-файлы? Может ли он делать все, что можно достичь в файлах SVG?

  3. Есть ли образец / учебник / видео с его использованием, кроме документации, которую я нашел?

ОБНОВЛЕНИЕ В марте 2016 года

Обновление Android Support 23.2.1 , поддержка векторных чертежей и анимационных векторных чертежей. (Вы также можете использовать lastone для того же самого)

Обновите версию библиотеки в файле gradle.

 compile 'com.android.support:recyclerview-v7:23.2.1' 

Vector drawables позволяют вам заменить несколько активов png на единую векторную графику , определенную в XML. Хотя ранее ограниченные Lollipop и более высокие устройства , как VectorDrawable и AnimatedVectorDrawable теперь доступны через два новых поддерживаемых библиотеки поддержки – векторный и анимированный векторный. Новое app:srcCompat атрибут app:srcCompat для ссылок на векторные чертежи.

Проверьте источник на github с примерами примеров .

Изменения для библиотеки appcompat v7:

Возвращенная зависимость от векторных активов, чтобы разработчики, использующие библиотеку appcompat, не были вынуждены использовать VectorDrawable и связанные с ним флаги сборки.

Вы можете попробовать эту библиотеку поддержки . Он поддерживает VectorDrawable и AnimatedVectorDrawable, представленные в Lollipop с полной обратной совместимостью.

Обновление 2 : они снова включаются в библиотеку поддержки 23.4.0:

Для пользователей AppCompat мы добавили API-интерфейс для повторного включения поддержки векторных чертежей из ресурсов (поведение, описанное в 23.2), через AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) – имейте в виду, что это все еще может вызвать проблемы с использованием памяти и Проблемы с обновлением экземпляров Configuration, поэтому почему он отключен по умолчанию.

Проверьте этот 23.4.0 сейчас

Обновление : это не работает с версией 23.3.0. Проверьте здесь подробности. Прокси-ресурсы не работают. app:srcCompat и setImageResource() работают.


Поддержка Vector Drawable доступна в Библиотеке поддержки версии 23.2 и выше. Однако, чтобы правильно использовать эти чертежи, они должны косвенно ссылаться.

Первым шагом будет удар по версии AppCompat .

 compile 'com.android.support:appcompat-v7:23.2.0' 

Вторая поддержка Vector Drawable. Если вы используете плагин Gradle, 2.0+

 android { defaultConfig { vectorDrawables.useSupportLibrary = true } } 

В противном случае

 android { defaultConfig { generatedDensities = [] } aaptOptions { additionalParameters "--no-version-vectors" } } 

В-третьих , обратитесь к связанному ответу .

К сожалению, на данный момент VectorDrawable и AnimatedVectorDrawable недоступны в библиотеке поддержки. Но чтобы воспользоваться этой функцией в версиях Pre-Lollipop, вы можете использовать неофициальный бэкпорт под названием MrVector.

MrVector доступен в Github, и он будет поддерживать версии Android 7+.

Из официального Readme

Чтобы добавить зависимость MrVector, добавьте следующую строку в блок зависимостей build.gradle.

 compile 'com.telly:mrvector:0.2.0' 

Чтобы создать выталкиваемый из векторного XML,

 Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_android); 

Надеюсь это поможет.

В дополнение к некоторым из ответов здесь: да, вы можете получить поддержку VectorDrawables pre-Lollipop , по крайней мере, частично.

Как частично? Это зависит от того, что я сделал для этой диаграммы (для библиотеки поддержки 23.4.0 – минимум – 25.1.0).

VectorDrawable cheatsheet

Lollipop не может обрабатывать файлы SVG без сторонних библиотек.

Лучшее решение, которое я нашел, это BetterVectorDrawable lib вместе с SVG to VectorDrawable Converter .

BetterVectorDrawable – это реализация VectorDrawable для Android 4.0+ с настраиваемым снижением поведения на Android 5.0+.

SVG to VectorDrawable Converter – пакетный конвертер изображений SVG в файлы ресурсов XML VectorDrawable. Онлайн-версия

Ссылки указывают на readmes, которые предоставляют достаточную информацию о том, как использовать lib и конвертер.

Если вы используете VectorDrawable, Android Studio будет автоматически генерировать файлы PNG (на основе ваших файлов XML) для версий Pre-Lollipop.

Обратите внимание, что созданные файлы PNG считаются BitmapDrawables вместо VectorDrawables на устройствах с API ниже 21 и поэтому не могут быть анимированными или похожими на этих устройствах.

См. «Обратная совместимость» для получения дополнительной информации: http://android-developers.blogspot.co.at/2015/09/android-studio-14.html

В настоящее время в библиотеке поддержки нет VectorDrawables.

Funkystein прав – VectorDrawable похож на SVG, поддерживая только возможности векторного рисования, которые пользуются наибольшим спросом, поэтому андроид может сосредоточиться на производительности. PathData, например, имеет тот же формат, что и строка «d» SVG.

Отличная новость заключается в том, что Google выпустила Android Support Library 23.2 Поддержка векторных чертежей и анимированных векторных чертежей!

Но спасибо людям, которые портировали эту библиотеку перед Google!

Это то, где библиотеки AppCompat великолепны, они могут вернуть многие новые функции Android обратно в гораздо более ранние версии. С недавно реализованным классом VectorDrawable разработчики теперь могут использовать векторные изображения вплоть до API 7 (Android 2.1 Eclair). Анимированные векторы немного более ограничены, и это происходит только в API 11 (Android 3.0 Honeycomb), но по-прежнему охватывает более 97% устройств в активном использовании сегодня

Руководство по использованию:

См. « Возраст векторов » от @chrisbanes