最简单的方法在Android中使用svg?

Com*_*ode 122 android android-activity androidsvg

我找到了无数的库,以便在Android中使用svg并避免令人沮丧的创建不同的分辨率并删除每个分辨率的文件,当应用程序有许多图标或图像时,这变得非常烦人.

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

我还使用Android Studio和Illustrator生成我的图标和图像.

小智 246

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

  1. 右键单击drawable
  2. 点击新建
  3. 选择矢量资产

如果您的计算机中有图像,则选择本地svg文件.之后,如果需要,还可以在对话框的右侧选择图像路径和更改图像大小的选项.以这种方式svg在您的项目中导入图像之后使用此图像使用相同的过程

@drawable/yourimagename
Run Code Online (Sandbox Code Playgroud)

  • 始终禁用"下一步"按钮.任何想法为什么? (5认同)
  • 当您将外部svg文件导入项目时,简短且有用的答案,没有头痛. (4认同)
  • 正是我在寻找什么:) (2认同)

Com*_*ode 17

更新:不要使用这个旧答案,更好地使用它: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放在libdir中.

  3. 将您的*.svg文件保存在res/drawable目录中(在Illustrator中就像按"另存为"一样简单并选择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());
    
    Run Code Online (Sandbox Code Playgroud)



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

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

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我可以在活动中像这样调用它:

    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);
Run Code Online (Sandbox Code Playgroud)

  • 您应该考虑将自己的答案标记为已接受而不是之前的答案 (3认同)
  • 当我尝试添加 SVG 文件时,出现错误:错误:文件名必须以 .xml 或 .png 结尾 (2认同)

San*_*eek 15

尝试这个:

在此输入图像描述

下一步:

在此输入图像描述

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

在此输入图像描述


Pra*_*evu 13

Android Studio从1.4开始支持SVG

这是一个关于如何导入的视频.


saj*_*asi 6

1.您需要将SVG转换为XML才能在Android项目中使用。

1.1 您可以使用Android SVG to VectorDrawable来做到这一点,但它不支持 SVG 的所有功能,例如一些渐变。

1.2 您可以通过Android Studio进行转换,但它可能使用一些仅支持 API 24 及更高版本的功能,导致您的应用程序在旧设备中崩溃。

然后添加vectorDrawables.useSupportLibrary = trueGradle文件中并像这样使用它:

<android.support.v7.widget.AppCompatImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:srcCompat="@drawable/ic_item1" />
Run Code Online (Sandbox Code Playgroud)

2.使用支持这些功能的SVG-Android这个库

在应用程序类中添加以下代码:

public void onCreate() {
    SVGLoader.load(this)
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用 SVG:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_android_red"/>
Run Code Online (Sandbox Code Playgroud)


San*_*ker 5

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