О преимуществах использования SVG формата изображений написано, например, здесь. Но на данный момент в Android SDK нет стандартного функционала, чтобы можно было эти картинки динамически загрузить в приложение, имея просто путь к файлу на SD-карте или в памяти телефона. Но есть сторонние решения.
Встроенный механизм в Android Studio
В студии начиная с версии X можно загружать в проект SVG-картинки с помощью встроенного механизма в .xml ресурсы:
ПКМ на папке drawable => New => Vector Asset => Local SVG file.
Использование:
android:src="@drawable/btn_image"AndroidSVG
В библиотеке AndroidSVG (исходники) есть возможность загрузки из assets, а также по Uri.
Также, с помощью библиотеки Glide (исходники) можно загружать картинки из удаленного репозитория по Uri из интернета.
Поключение:
implementation 'com.caverock:androidsvg-aar:1.3'Есть свой контрол SVGImageView:
1 2 |
<com.caverock.androidsvg.SVGImageView app:svg="my_svg_file.svg" /> |
Возможными значениями атрибута app:svg могут быть:
- a filename in your assets folder, as in the above example
- a resource reference such as @drawable/my_svg_file
- a resource URI such as android.resource://com.example.myapplication/raw/my_svg_file
svg-android
Библиотека svg-android (исходники) позволяет загрузить SVG из assets, InputStream (файла), ресурса, строки и вернуть его как Drawable или Picture.
Говорят, библиотека поддерживает только формат SVG basic 1.1, который не поддерживается Inkspace, а рождается только в Adobe Illustrator.
Подключение (создать папку app/libs и добавить туда svg-android.jar из репозитория):
implementation files('libs/svg-android.jar')Пример загрузки из ресурса (должен быть загружен как Vector Asset) в Picture:
1 2 |
SVG svg = SVGParser.getSVGFromResource(context.getResources(), R.drawable.ic_test); return svg.getPicture(); |
Пример загрузки из файла в Drawable:
1 2 3 4 5 6 7 8 |
File file = new File(fullFileName); try { FileInputStream fileInputStream = new FileInputStream(file); SVG svg = SVGParser.getSVGFromInputStream(fileInputStream); return svg.createPictureDrawable(); } catch (FileNotFoundException e) { e.printStackTrace(); } |
svg-android-2
Библиотека svg-android-2 (исходники) – форк предыдущего проекта. Уже понимает Inkscape, а также поддерживает другие фишки этого формата, о чем можно почитать на офф.странице.