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

Фон

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

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

Вопросы

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

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

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

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

Ответ 1

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

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

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

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

Выделенные векторные элементы позволяют вам заменить несколько объектов png на единую векторную графику, определенную в XML. Пока ранее ограниченные Lollipop и более высокие устройства, теперь VectorDrawable и AnimatedVectorDrawable теперь доступны через два новых поддерживаемых библиотеки поддержки - векторный и анимированный-векторный. новый атрибут app:srcCompat для ссылочных векторных чертежей.

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

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

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

Ответ 2

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

Ответ 3

Обновление 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"  
   }  
}

Третий, обратитесь к связанному ответу .

Ответ 4

К сожалению, на данный момент VectorDrawable и AnimatedVectorDrawable недоступны в библиотеке поддержки. Но чтобы воспользоваться этой возможностью в версиях Pre-Lollipop, вы можете использовать неофициальный backport под названием 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);

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

Ответ 5

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

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

VectorDrawable cheatsheet

Ответ 6

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

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

BetterVectorDrawable - это реализация VectorDrawable для Android 4. 0+ с настраиваемым режимом отката на Android 5. 0+.

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

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

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

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

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

Обратитесь " age-of-the-vectors" by @chrisbanes