使用SVG作为Android中的背景绘制

时间:2011-10-22 20:47:44

标签: android background svg

我正在尝试使用SVG图像(使用Inkscape创建并保存为普通SVG)作为我的应用程序的背景。我正在尝试使用svg-android库来执行此操作。我在background.svg中有一个名为res/raw的文件。我的代码如下所示:

SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.background);
Drawable pictureDrawable = svg.createPictureDrawable();
Bitmap bitmap = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(), pictureDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap);

LinearLayout backgroundLayout = (LinearLayout) findViewById(R.id.background);
bitmapDrawable.setTileModeX(Shader.TileMode.REPEAT);
backgroundLayout.setBackgroundDrawable(bitmapDrawable);

但是,当我的应用程序启动时,没有任何内容显示为背景(除了布局中的背景颜色)。我的布局xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#aacceeff"
    >

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/background"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    >
 </LinearLayout>

</LinearLayout>

更新

我的SVG似乎有问题。这可能是因为不支持所有功能。

2 个答案:

答案 0 :(得分:18)

svg-android项目在一年多内没有更新,它不支持SVG1.2,因此不支持由Inkscape(开源)生成的svgs。

但是有一个新的android svg库:AndroidSVG

它们的版本为1.2,目前正在进行1.3版的工作。只包括jar库,可以编程方式在android应用程序中包含svgs。几乎所有的svg功能都包含在内。我还没找到一个我无法使用这个库合并的svg。

如果在项目中将来自源代码(hg clone)的orroidsvg作为库模块包含,则会获得SVGImageView类,它是ImageView的扩展,您可以使用xml布局文件将svg添加到项目中,如下所示:

<com.caverock.androidsvg.SVGImageView
    xmlns:svg="http://schemas.android.com/apk/res-auto"
    android:layout_width="100dp"
    android:layout_height="50dp"
    svg:svg="filename.svg"/>

就是这样。您只需将filename.svg放在assets文件夹中,就可以了。

它支持API 8及更高版本。将其用于API时存在一些问题&lt; 11但我能解决这些问题。我在项目页面上将它们作为问题发布,作者在几分钟内回复。它们已被添加到下一版本中。如果您有任何问题,请查看已解决的问题,否则我可以在此处回答问题。

P.S。项目页面上的文档和示例非常好,图书馆很愉快。 Android和svg是一个强大的组合。

答案 1 :(得分:1)

我尝试使用以下代码的示例,它正确显示背景:

LinearLayout root = (LinearLayout) findViewById(R.id.background);
SVG svg = SVGParser.getSVGFromResource(getResources(),
                R.raw.android_body);
Drawable pictureDrawable = svg.createPictureDrawable();
root.setBackgroundDrawable(pictureDrawable);

你有没有尝试过另一个svg?