Использование SVG в качестве фонового рисунка на Android

Я пытаюсь использовать 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>

UPDATE

Кажется, что есть проблема с моим SVG. Это может быть связано с тем, что все функции не поддерживаются.

Ответ 1

Проект svg-android не обновляется более года и не поддерживает SVG1.2, поэтому svgs, созданные Inkscape (open-source), не поддерживаются.

Однако есть новая библиотека svg для Android: AndroidSVG

Они находятся на версии 1.2, и в настоящее время работает над 1.3. Включая только библиотеку jar, можно программно включить svgs в приложения для Android. Почти все функции svg включены. Мне еще предстоит найти svg, который я не смог включить в эту библиотеку.

Если вы включаете androidsvg из исходного кода (hg clone) в ваш проект в качестве библиотечного модуля, вы получаете класс SVGImageView, который является расширением ImageView, посредством которого вы можете добавить svg в свой проект, используя файлы формата xml, например:

<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 в папке с ресурсами, и вам будет удобно идти.

Он поддерживает API 8 и выше. Было несколько проблем при использовании его для API < 11 но я смог их исправить. Я разместил их как проблемы на странице проекта, и авторы ответили в течение нескольких минут. Они добавлены к следующей ревизии. Если у вас возникнут проблемы с рассмотрением разрешенных проблем, я не могу ответить на вопросы здесь.

P.S. Документация и примеры на странице проекта превосходны, и библиотека с удовольствием работает. Android и svg - мощное сочетание.

Ответ 2

Я попробовал пример, используя следующий код, и он правильно показывает фон:

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

Вы пробовали с другим svg?