Самый простой способ использовать SVG в Android?

Я нашел множество библиотек, чтобы использовать svg в Android и избежать утомительного создания разных разрешений и удаления файлов для каждого разрешения, это становится очень раздражающим, когда в приложении много значков или изображений.

Может ли кто-нибудь быть столь любезным, чтобы дать пошаговый процесс простейшей в использовании библиотеки для использования SVG в Android, я уверен, что это поможет и многим другим.

Также я использую Android Studio и Illustrator для создания своих иконок и изображений.


person CommonSenseCode    schedule 18.06.2015    source источник
comment
Возможный дубликат Каковы лучшие практики использования значков SVG на Android?   -  person serv-inc    schedule 11.05.2017
comment
Короткое видео о том, как импортировать svg в студию Android: youtube.com/watch?v=8e3I -PYJNHg   -  person Zohab Ali    schedule 07.10.2018


Ответы (9)


Сначала вам нужно импортировать svg файл, выполнив простые шаги.

  1. Щелкните правой кнопкой мыши папку с возможностью переноса вашего проекта (app / res / drawable)
  2. Нажмите новый
  3. Выбрать векторный объект

Если изображение доступно на вашем компьютере, выберите локальный svg файл. После этого выберите путь к изображению, и при желании в правой части диалогового окна также станет доступна опция изменения размера изображения. Таким образом svg изображение будет импортировано в ваш проект.

После этого для использования этого образа используйте ту же процедуру:

@drawable/yourimagename
person Pallavi Jain    schedule 01.09.2016
comment
Краткий и полезный ответ, без головной боли при импорте внешних файлов svg в проект. - person CodeToLife; 01.05.2017
comment
именно то, что я искал :) - person Mohamed Nageh; 06.09.2017
comment
кнопка Next всегда отключена. есть идеи почему? - person mrid; 29.12.2017
comment
Итак, как нам изменить цвет svg? - person Oniya Daniel; 27.09.2018
comment
Работает как шарм. Отлично! - person sud007; 06.03.2019
comment
Именно то, что мне нужно. Спасибо - person viper; 02.09.2019
comment
@mrid, если это то, что вам нужно сделать только один раз, вы можете использовать Inkscape или vectr.com (бесплатно) или Adobe Illustrator и т. д. - person Sir Von Berker; 17.03.2020

ОБНОВЛЕНИЕ: НЕ используйте этот старый ответ, лучше используйте его: https://stackoverflow.com/a/39266840/4031815

Хорошо, после нескольких часов исследования я обнаружил, что svg-android довольно прост в использовании, поэтому я оставляю здесь пошаговые инструкции:

  1. загрузить библиотеку с: https://code.google.com/p/svg-android/downloads/list Последняя версия на момент написания: svg-android-1.1.jar

  2. Поместите банку в папку lib.

  3. Сохраните файл * .svg в каталоге res/drawable (в иллюстраторе так же просто, как нажать Сохранить как и выбрать svg)

  4. Кодируйте следующее в своей деятельности, используя библиотеку svg:

    ImageView imageView = (ImageView) findViewById(R.id.imgView);
    SVG svg = SVGParser.getSVGFromResource(getResources(), R.drawable.example);
    //The following is needed because of image accelaration in some devices such as samsung
    imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    imageView.setImageDrawable(svg.createPictureDrawable());
    



Вы можете сократить шаблонный код следующим образом

Очень просто, я сделал простой класс, содержащий прошлый код и сокращающий шаблонный код, например:

import android.app.Activity;
import android.view.View;
import android.widget.ImageView;

import com.larvalabs.svgandroid.SVG;
import com.larvalabs.svgandroid.SVGParser;

public class SvgImage {

    private static ImageView imageView;
    private Activity activity;
    private SVG svg;
    private int xmlLayoutId;
    private int drawableId;


    public SvgImage(Activity activity, int layoutId, int drawableId) {
        imageView = (ImageView) activity.findViewById(layoutId);
        svg = SVGParser.getSVGFromResource(activity.getResources(), drawableId);
        //Needed because of image accelaration in some devices such as samsung
        imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        imageView.setImageDrawable(svg.createPictureDrawable());
    }
}

Теперь в действии я могу назвать это так:

    SvgImage rainSVG = new SvgImage(MainActivity.this, R.id.rainImageView, R.drawable.rain);
    SvgImage thunderSVG = new SvgImage(MainActivity.this, R.id.thunderImageView, R.drawable.thunder);
    SvgImage oceanSVG = new SvgImage(MainActivity.this, R.id.oceanImageView, R.drawable.ocean);
    SvgImage fireSVG = new SvgImage(MainActivity.this, R.id.fireImageView, R.drawable.fire);
    SvgImage windSVG = new SvgImage(MainActivity.this, R.id.windImageView,R.drawable.wind);
    SvgImage universeSVG = new SvgImage(MainActivity.this, R.id.universeImageView,R.drawable.universe);
person CommonSenseCode    schedule 18.06.2015
comment
Когда я пытаюсь добавить файлы SVG, я получаю сообщение об ошибке: Ошибка: имя файла должно заканчиваться на .xml или .png. - person Sujay U N; 12.08.2017
comment
Почему imageView static? Я вижу здесь большой красный флаг жука. SvgImage rainSVG = new SvgImage(MainActivity.this, R.id.rainImageView, R.drawable.rain); SvgImage thunderSVG = new SvgImage(MainActivity.this, R.id.thunderImageView, R.drawable.thunder); rainSVG ссылка содержит thunderImageView - person DSchmidt; 25.08.2017
comment
@DSchmidt - это просто указатель на просмотр изображения. Если бы это был мой код, я бы сделал весь класс статическим с помощью одного метода под названием LoadSVG. и, как видите, нет смысла загружать данные в закрытые переменные, к которым нельзя получить доступ. - person Nasreddine Galfout; 30.06.2020

Android Studio поддерживает SVG начиная с 1.4 и более поздних версий.

Вот видео о том, как как импортировать.

person Pradeep Mahdevu    schedule 14.10.2015
comment
Это лучший ответ. Android Studio делает это очень просто! - person dustinrwh; 28.09.2017

Вместо добавления библиотек, увеличивающих размер вашего apk, я предлагаю вам преобразовать Svg в формат для рисования, используя http://inloop.github.io/svg2android/. и добавьте vectorDrawables.useSupportLibrary = true в градиент,

person Sanny Nagveker    schedule 30.05.2017

  1. вам нужно преобразовать SVG в XML для использования в проекте Android.

1.1 вы можете сделать это с помощью этого сайта: http://inloop.github.io/svg2android/ но он не поддерживает все функции SVG, как некоторые градиенты.

1.2, вы можете конвертировать через Android Studio, но он может использовать некоторые функции, которые поддерживают только API 24 и выше, что может привести к сбою вашего приложения на старых устройствах.

и добавьте vectorDrawables.useSupportLibrary = true в файл gradle и используйте так:

<android.support.v7.widget.AppCompatImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:srcCompat="@drawable/ic_item1" />
  1. используйте эту библиотеку https://github.com/MegatronKing/SVG-Android, которая поддерживает эти функции : https://github.com/MegatronKing/SVG-Android/blob/master/support_doc.md

добавьте этот код в класс приложения:

public void onCreate() {
    SVGLoader.load(this)
}

и используйте SVG следующим образом:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_android_red"/>
person sajad abbasi    schedule 21.07.2018
comment
Зачем использовать загрузчик SVG, если у вас прямолинейный подход @Pallavi? Есть ли преимущество в использовании загрузчика? - person Taslim Oseni; 29.11.2018
comment
@Taslim поддерживаемых функций больше, чем обычно. вы можете увидеть поддерживаемые функции и посмотреть. - person sajad abbasi; 29.11.2018

Попробуйте плагин SVG2VectorDrawable. Перейдите в Preferences-> Plugins-> Browse Plugins и установите SVG2VectorDrawable. Отлично подходит для преобразования файлов sag в векторные с возможностью рисования. После установки вы найдете значок для этого в разделе панели инструментов справа от значка справки (?).

person Rahul Thakur    schedule 03.01.2017
comment
У меня не работает - путь к файлу SVG даже не загружается в плагин. Лучший ответ выше намного проще и выполняет свою работу. - person DaveNOTDavid; 03.04.2018
comment
Отличный плагин - быстро преобразовал многие SVG в векторные чертежи! - person Morten Holmgaard; 13.04.2018

Вы можете использовать библиотеку Coil для загрузки svg. Просто добавьте эти строки в build.gradle

// ... Coil (https://github.com/coil-kt/coil)
implementation("io.coil-kt:coil:0.12.0")
implementation("io.coil-kt:coil-svg:0.12.0")

Затем добавьте функцию расширения

fun AppCompatImageView.loadSvg(url: String) {
    val imageLoader = ImageLoader.Builder(this.context)
        .componentRegistry { add(SvgDecoder([email protected])) }
        .build()

    val request = ImageRequest.Builder(this.context)
        .crossfade(true)
        .crossfade(500)
        .data(url)
        .target(this)
        .build()

    imageLoader.enqueue(request)
}

Затем вызовите этот метод в своей деятельности или фрагменте

your_image_view.loadSvg("your_file_name.svg")
person Aminul Haque Aome    schedule 13.09.2020

1) Щелкните правой кнопкой мыши по каталогу для рисования, затем перейдите в новый, затем перейдите к векторным ресурсам 2) измените тип актива с клип-арта на локальный 3) просмотрите файл 4) укажите размер 5) затем нажмите `` Далее '' и готово. Ваш пригодный для использования svg будет создан в доступном для рисования каталог

person Syed Ovais Hussain    schedule 11.03.2020

попробуй это

введите описание изображения здесь

следующий шаг -

введите описание изображения здесь

а теперь отредактируйте имя изображения или значка и сохраните его.

введите описание изображения здесь

Спасибо, удачного кодирования.

person Sandeep Pareek    schedule 12.04.2021