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

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

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

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

10 ответов

Решение

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

  1. Щелкните правой кнопкой мыши на Drawable
  2. Нажмите новый
  3. Выберите векторный актив

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

@drawable/yourimagename

ОБНОВЛЕНИЕ: НЕ используйте этот старый ответ, лучше используйте это: /questions/1425318/samyij-prostoj-sposob-ispolzovat-svg-v-android/1425333#1425333

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

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

  2. Положить банку в lib реж.

  3. Сохраните ваш *.svg файл в res/drawable dir (в иллюстраторе так же просто, как нажать Сохранить как и выбрать 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);

Android Studio поддерживает SVG начиная с версии 1.4

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

попробуй это

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

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

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

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

  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"/>

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

Вы можете использовать библиотеку 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(this@loadSvg.context)) }
        .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")

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

Загрузите SVG, используя библиотеку Coil . Обратите внимание, что эта библиотека построена на Kotlin Coroutines.

Импортируйте библиотеку расширений:

      implementation("io.coil-kt:coil-svg:2.1.0")

И добавьте декодер в реестр компонентов при создании вашего

      ImageLoader:
val imageLoader = ImageLoader.Builder(context)
    .components {
        add(SvgDecoder.Factory())
    }
    .build()

Вот и все!

Щелкните здесь для получения дополнительной информации.

Другие вопросы по тегам