ChatGPT解决这个技术问题 Extra ChatGPT

在 Android 中使用 SVG 图像的最简单方法是什么?

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

在 Android 中使用 SVG 图像的最简单易用的库的分步过程是什么?

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

关于如何在 android studio 中导入 svg 的短视频:youtube.com/watch?v=8e3I-PYJNHg

P
Peter Mortensen

首先,您需要通过以下简单步骤导入 SVG 文件。

右键单击项目的可绘制文件夹 (app/res/drawable) 单击新建选择矢量资源

如果图像在您的计算机中可用,则选择本地 svg 文件。

之后,选择图像路径。如果您愿意,还可以在对话框的右侧使用更改图像大小的选项。这样,SVG 图像就被导入到您的项目中。

之后,要使用此图像,请使用相同的过程:

@drawable/yourimagename

简短而有用的答案,当您将外部 svg 文件导入项目时不会头疼。
Next 按钮始终处于禁用状态。知道为什么吗?
那么,我们如何改变 svg 的颜色呢?
@mrid 如果这是你必须做的事情,你可以使用 Inkscape 或 vectr.com(免费)或 Adobe Illustrator 等。
Android Studio 中存在一个错误,有时您需要打开 res/drawable/file.xml(导入 SVG 文件时自动创建的文件)并将每次出现的 替换为 -。如果你不这样做,你的应用程序将会崩溃。在此处查看我的错误报告:issuetracker.google.com/issues/195687730
P
Peter Mortensen

更新:不要使用这个旧答案。更好地使用 Pallavi Jain 的答案

我发现 svg-android 很容易使用,所以分步说明在这里:

从以下网址下载库:https://code.google.com/p/svg-android/downloads/list。撰写本文时的最新版本是: svg-android-1.1.jar 将 JAR 文件放在 lib 目录中。将 *.svg 文件保存在 res/drawable 目录中(在 Illustrator 中,只需按另存为并选择 .svg 即可)使用 SVG 库在您的活动中编写以下代码: ImageView imageView = (ImageView) findViewById(R. id.imgView); SVG svg = SVGParser.getSVGFromResource(getResources(), R.drawable.example); // 由于某些设备中的图像加速,需要以下内容,例如三星 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 acceleration 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);

当我尝试添加 SVG 文件时,我收到错误消息,错误:文件名必须以 .xml 或 .png 结尾
为什么是 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
@DSchmidt 只是指向图像视图的指针。如果是我的代码,我会使用一种称为 LoadSVG 的方法使整个类成为静态的。正如您所看到的,没有必要将数据加载到无法访问的私有变量中。
P
Pradeep Mahdevu

Android Studio 支持来自 1.4 onwards 的 SVG

这是 how to import 上的视频。


P
Peter Mortensen

尝试这个:

https://i.stack.imgur.com/NulKz.png

下一步:

https://i.stack.imgur.com/OXqKn.png

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

https://i.stack.imgur.com/jAjGU.png


一步一步我喜欢它,拯救我的生命!
这遗漏了很多。这是什么应用程序?安卓工作室?在什么情况下以及如何调用 "Vector Asset" (添加它?- 将它添加到什么?)?上下文菜单?在哪里和什么?为什么会调用"Vector Asset"?想法是什么?总体思路是什么?将 SVG 文件导入 Android Studio?还有什么?请通过 editing (changing) your answer 回复,而不是在评论中(没有“编辑:”、“更新:”或类似内容 - 答案应该看起来好像是今天写的)。
P
Peter Mortensen

我建议您使用 Android SVG to VectorDrawable 将 SVG 转换为可绘制对象,而不是添加会增加 APK 文件大小的库。

并在 Gradle 中添加 vectorDrawables.useSupportLibrary = true


P
Peter Mortensen

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

1.1 您可以使用 Android SVG to VectorDrawable 做到这一点,但它不支持 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" />

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

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

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

并像这样使用 SVG:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_android_red"/>

当你有@Pallavi 的直截了当的方法时,为什么要使用 SVG 加载器?使用装载机有什么好处吗?
@Taslim 支持的功能比通常的方式更多。您可以查看支持的功能并查看。
P
Peter Mortensen

您可以使用线圈库来加载 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")

线圈使用此工具 bigbadaboom.github.io/androidsvg
R
Rahul Thakur

试试 SVG2VectorDrawable 插件。转到首选项 → 插件 → 浏览插件并安装 SVG2VectorDrawable。它非常适合将 svg 文件转换为矢量绘图。

安装后,您会在帮助 (?) 图标右侧的工具栏部分找到一个图标。


对我不起作用 - SVG 文件路径甚至没有上传到插件中。上面的最佳答案要简单得多,并且可以完成工作。
很棒的插件 - 快速将许多 svg 转换为矢量绘图!
什么是“sag 文件”?你的意思是“SVG文件”?或者是其他东西?
P
Peter Mortensen

右键单击可绘制目录,按新建,然后转到矢量资源 将资源类型从剪贴画更改为本地 浏览您的文件 输入大小 然后单击下一步,然后完成

您可用的 SVG 图像将在可绘制目录中生成。


M
Mattia Ferigutti

使用线圈库加载 SVG。请注意,此库是基于 Kotlin 协程构建的。

导入扩展库:

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

并在构建您的组件时将解码器添加到您的组件注册表中

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

而已!

Click here 了解更多信息。