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