在android中使用svg的最简单方法是什么?

时间:2015-06-18 18:38:37

标签: android android-activity androidsvg

为了在Android中使用svg,我发现了无数的库,避免了为每个分辨率创建不同的分辨率和删除文件,这在应用程序有很多图标或图像时会变得非常烦人。

任何人都可以在Android中使用最简单的库来逐步使用SVG,我相信这也会帮助很多其他人。

此外,我还使用Android Studio和Illustrator生成图标和图像。

9 个答案:

答案 0 :(得分:188)

首先,您需要按照以下简单步骤导入svg个文件。

  1. 右键点击drawable
  2. 点击新
  3. 选择矢量资产
  4. 如果您的计算机中有图像 然后选择本地svg文件。 之后选择图像路径 如果您愿意,还可以在对话框的右侧找到更改图像大小的选项。 这样就可以在项目中导入svg图像 之后使用此图像使用相同的步骤

    @drawable/yourimagename
    

答案 1 :(得分:16)

  

更新:不要使用这个旧答案,更好地使用它:https://stackoverflow.com/a/39266840/4031815

好了几个小时的研究后我发现 svg-android 非常容易使用,所以我将离开这里一步一步的说明:

  1. 从以下网址下载lib:https://code.google.com/p/svg-android/downloads/list 撰写本文时的最新版本是: svg-android-1.1.jar

  2. 将jar放入 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());
    


  5. 您可以像这样减少样板代码

    非常简单我创建了一个简单的类来包含过去的代码并减少样板代码,如下所示:

    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);
    

答案 2 :(得分:11)

Android Studio支持来自1.4 onwards

的SVG

以下是how to import上的视频。

答案 3 :(得分:5)

我建议您使用http://inloop.github.io/svg2android/将Svg转换为drawable,而不是添加增加apk大小的库。 并在gradle中添加vectorDrawables.useSupportLibrary = true

答案 4 :(得分:3)

尝试使用SVG2VectorDrawable插件。转到首选项 - >插件 - >浏览插件并安装SVG2VectorDrawable。非常适合将sag文件转换为vector drawable。 安装完成后,您会在帮助(?)图标右侧的工具栏部分找到一个图标。

答案 5 :(得分:2)

1)右键单击可绘制目录,然后转到新建,然后转到矢量资产 2)将资产类型从剪贴画更改为本地 3)浏览文件 4)给尺寸 5)然后单击下一步然后完成 您的可用svg将在可绘制目录中生成

答案 6 :(得分:2)

您可以使用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")

答案 7 :(得分:1)

  1. 您需要将SVG转换为XML,以便在android项目中使用。

1.1您可以在以下站点上执行此操作:http://inloop.github.io/svg2android/ 但是它不支持SVG的所有功能,例如某些渐变。

1.2您可以通过android studio进行转换,但它可能会使用某些仅支持API 24及更高版本的功能,从而导致您的应用在较旧的设备中崩溃。

并在gradle文件中添加vectorDrawables.useSupportLibrary = true并使用,例如:

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

答案 8 :(得分:0)

试试这个

enter image description here

下一步 -

enter image description here

现在编辑图像或图标名称并保存。

enter image description here

感谢您愉快的编码。