为了在 Android 中使用 SVG 图像并避免令人沮丧地创建不同的分辨率和为每个分辨率删除文件,我找到了无数的库。当应用程序有许多图标或图像时,这变得非常烦人。
在 Android 中使用 SVG 图像的最简单易用的库的分步过程是什么?
我还使用 Android Studio 和 Illustrator 来生成我的图标和图像。
首先,您需要通过以下简单步骤导入 SVG 文件。
右键单击项目的可绘制文件夹 (app/res/drawable) 单击新建选择矢量资源
如果图像在您的计算机中可用,则选择本地 svg
文件。
之后,选择图像路径。如果您愿意,还可以在对话框的右侧使用更改图像大小的选项。这样,SVG 图像就被导入到您的项目中。
之后,要使用此图像,请使用相同的过程:
@drawable/yourimagename
更新:不要使用这个旧答案。更好地使用 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);
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
尝试这个:
https://i.stack.imgur.com/NulKz.png
下一步:
https://i.stack.imgur.com/OXqKn.png
现在编辑图像或图标名称并保存:
https://i.stack.imgur.com/jAjGU.png
我建议您使用 Android SVG to VectorDrawable 将 SVG 转换为可绘制对象,而不是添加会增加 APK 文件大小的库。
并在 Gradle 中添加 vectorDrawables.useSupportLibrary = true
。
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"/>
您可以使用线圈库来加载 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 文件转换为矢量绘图。
安装后,您会在帮助 (?) 图标右侧的工具栏部分找到一个图标。
右键单击可绘制目录,按新建,然后转到矢量资源 将资源类型从剪贴画更改为本地 浏览您的文件 输入大小 然后单击下一步,然后完成
您可用的 SVG 图像将在可绘制目录中生成。
使用线圈库加载 SVG。请注意,此库是基于 Kotlin 协程构建的。
导入扩展库:
implementation("io.coil-kt:coil-svg:2.1.0")
并在构建您的组件时将解码器添加到您的组件注册表中
ImageLoader:
val imageLoader = ImageLoader.Builder(context)
.components {
add(SvgDecoder.Factory())
}
.build()
而已!
Click here 了解更多信息。
Next
按钮始终处于禁用状态。知道为什么吗?res/drawable/file.xml
(导入 SVG 文件时自动创建的文件)并将每次出现的−
替换为-
。如果你不这样做,你的应用程序将会崩溃。在此处查看我的错误报告:issuetracker.google.com/issues/195687730