Лесно превключете към формат на векторно изображение вместо нарязване за различни плътности на екрана в Android 4

превключете

Струва ми се, че най-правилното решение е да се откаже от използването на растерна графика в приложението в полза на векторна графика. В същото време бих искал да използвам максимално възможностите на системата. Android 5.0 въведе VectorDrawable - поддръжка на векторен формат за картини, които са поставени като ресурси с xml разширение в папката за рисуване. Такива картини могат да бъдат препратени по обичайния начин от XML маркиране.

Използването на VectorDrawable би било страхотно решение, ако не беше необходимостта да поддържаме устройства с Android 4.0+, които са мнозинството. VectorDrawable не е в библиотеката за поддръжка и не се знае кога ще се появи там (въпреки че е направено начало). Но не бъдете тъжни: има страхотна библиотека с отворен код BetterVectorDrawable под лиценза Apache 2.0, която всъщност пренася VectorDrawable към Android 4.0+, предоставяйки същия интерфейс и ви позволява да използвате системата VectorDrawable на Android 5.0+, ако е необходимо. Трябва да се отбележи, че има няколко подобни библиотеки, но те не заслужават вниманието ви, защото не ви позволяват да се обърнете напълно към ресурсите за рисуване на вектори от маркирането.

За съжаление разработчиците на Android не предоставиха поддръжка заградиенти,текстури,маскивъв VectorDrawable. Това е незначителен проблем, но трябва да имате предвид, когато проектирате приложение. Ако тези елементи не могат да бъдат изоставени, тогава все още можете да използвате растерна графика / фигура, която може да бъде изчертана на някои места, като основно превключвате към вектор.

BetterVectorDrawable библиотека

Свързване на библиотеката

За да свържете библиотеката с приложението, това е достатъчнодобавете един ред в раздела за зависимости на файлаbuild.gradle, намиращ се в директорията на модула на приложението:

Библиотеката се разпространява чрез хранилището на JCenter, което е по подразбиране за нови проекти на Android Studio.

Ако сте създали проекта преди много време, тогава може да използвате централното хранилище на Maven. За да проверите това, трябва да потърсите във файловетеbuild.gradleза срещания на низа

и добавете до него

Включете прихващането на ресурси

Библиотеката трябва да предаде списък с идентификатори на векторни ресурси, така че да разбере кои от тях могат да се рисуват векторно. BetterVectorDrawable ще прихваща обажданията към тях и ще създава екземпляри на VectorDrawable. Тъй като трябва да предадете списъка само веднъж, най-добре е да го направите в метода onCreate() на класа Application, което ще изисква да създадете негов наследник:

И посочете този приемник в манифеста на приложението:

Има три начина за прехвърляне на списъка: удобен, бърз и ръчен.

Удобен начин

Методът findAllVectorResourceIdsSlow сканира всички XML ресурси с възможност за изтегляне и се уверява, че всеки върнат ресурс е вектор с възможност за изтегляне. Разработчиците съветват да използвате този метод по подразбиране, но това е най-малко продуктивният метод, т.е. на по-стари устройства времето за стартиране на приложението може да се увеличи значително.

На Google Nexus 5, в приложение с 400 векторни ресурса, findAllVectorResourceIdsSlow завършва за по-малко от 150 ms.

Бърз начин

Методът findVectorResourceIdsByConvention предполага, че всички имена на векторни ресурси започват сvector_или завършват с_vector. Конвенцията за именуване трябва да бъде посочена с помощта на параметъраresourceNamingConvention.

На Google Nexus 5 в приложение с 400 векторни ресурса, findVectorResourceIdsByConvention завършва за по-малко от 20 ms.

Ръчен начин

Списъкът с всички идентификатори на векторни изображения просто се прехвърля. 0 ms.

Използване на векторно чертане

Или от маркиране:

Както виждате, всичко е просто.

Ако имате въпроси, можете да ме зададете или да видите демо приложението. Проблемите с библиотеката е най-добре да се докладват на разработчиците в GitHub.

В следващата част ще обсъдим конвертирането на изображения от SVG във векторно чертаем XML.

Hardcore conf в C++. Каним само професионалисти.