为了在Android中使用svg并避免令人沮丧的创建不同分辨率并为每个分辨率删除文件,我发现了无数的库,当应用程序具有许多图标或图像时,这将变得非常烦人。
任何人都可以像这样一步一步地介绍最简单的库来在Android中使用SVG的过程,我相信这也会对其他许多人有所帮助。
另外,我使用Android Studio和Illustrator生成图标和图像。
为了在Android中使用svg并避免令人沮丧的创建不同分辨率并为每个分辨率删除文件,我发现了无数的库,当应用程序具有许多图标或图像时,这将变得非常烦人。
任何人都可以像这样一步一步地介绍最简单的库来在Android中使用SVG的过程,我相信这也会对其他许多人有所帮助。
另外,我使用Android Studio和Illustrator生成图标和图像。
Answers:
首先,您需要按照svg
以下简单步骤导入文件。
如果您的计算机中有图像,请选择本地svg
文件。之后,选择图像路径,并在对话框的右侧提供更改图像大小的选项(如果需要)。以这种方式将svg
图像导入到您的项目中之后,使用相同的过程
@drawable/yourimagename
Next
按钮始终处于禁用状态。知道为什么吗?
更新:不要使用这个旧答案,最好使用这个:https : //stackoverflow.com/a/39266840/4031815
好了,经过几个小时的研究,我发现svg-android非常易于使用,因此我将逐步说明:
从以下位置下载lib:https://code.google.com/p/svg-android/downloads/list
撰写本文时的最新版本是:svg-android-1.1.jar
将罐子放在lib
目录中。
将* .svg文件保存在res/drawable
dir中(在illustrator中就像按“另存为”并选择svg一样容易)
使用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);
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
建议您不要使用http://inloop.github.io/svg2android/将Svg转换为drawable,而不是添加会增加apk大小的库。并添加vectorDrawables.useSupportLibrary = true
gradle,
尝试使用SVG2VectorDrawable插件。转到“首选项”->“插件”->“浏览插件”,然后安装SVG2VectorDrawable。非常适合将sag文件转换为可绘制的矢量。安装完成后,您将在帮助(?)图标右侧的工具栏中找到一个图标。
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" />
将此代码添加到应用程序类中:
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)然后单击下一步,然后单击完成。目录