2011-10-22 14 views
11

Estoy tratando de usar una imagen SVG (creada usando Inkscape y guardada como SVG simple) como fondo para mi aplicación. Estoy tratando de hacer esto usando la biblioteca svg-android. Tengo un archivo llamado background.svg en res/raw. Mi código es el siguiente:Usando un SVG como fondo dibujable en Android

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); 

Sin embargo, cuando mi aplicación se inicia y no aparece nada como el fondo (que no sea el color de fondo de la disposición). Mi archivo XML distribución es la siguiente:

<?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> 

ACTUALIZACIÓN

Parece que hay un problema con mi SVG. Puede deberse al hecho de que no todas las funciones son compatibles.

+0

¿Ha intentado configurar la imagen DrawableDrawable como fondo del diseño en lugar de BitmapDrawable bitmapDrawable? –

+0

@DimitrisMakris Sí, eso fue lo primero que probé, pero todavía tengo un fondo en blanco. Otro problema es que no hay forma de establecer el mosaico en un 'PictureDrawable'. –

+0

Por las dudas; - U sabe que Android no es compatible nativamente con SVG Pruebe su código en Firefox para Android? – Chasbeen

Respuesta

14

El proyecto svg-android no se ha actualizado en más de un año y no es compatible con SVG1.2, por lo que los svgs generados por Inkscape (código abierto) no son compatibles. Sin embargo

hay una nueva biblioteca SVG androide: AndroidSVG

Ellos están en la versión 1.2 y el trabajo en 1.3 está actualmente en curso. Incluyendo solo la biblioteca de tarros, uno puede incluir programáticamente svgs en aplicaciones de Android. Casi todas las funciones svg están incluidas. Todavía tengo que encontrar un svg que no pude incorporar utilizando esta biblioteca.

Si incluye androidsvg de la fuente (clon Hg) en su proyecto como un módulo de la biblioteca se obtiene la clase SVGImageView que es una extensión de ImageView mediante el cual se puede añadir SVG a su proyecto utilizando los archivos de diseño xml de esta manera:

<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"/> 

Eso es todo. Todo lo que necesita hacer es colocar filename.svg en la carpeta de activos y listo.

Es compatible con API 8 y superior. Hubo algunos problemas al usarlo para API < 11 pero pude solucionarlos. Los publiqué como problemas en la página del proyecto y los autores respondieron en minutos. Se han agregado a la próxima revisión. Si tiene algún problema, mire los problemas resueltos, en caso contrario, estoy disponible para responder preguntas aquí.

P.S. La documentación y los ejemplos en la página del proyecto son excelentes y la biblioteca es un placer trabajar con ella. Android y svg son una mezcla poderosa.

1

he intentado un ejemplo usando el siguiente código y se muestra el fondo correctamente:

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

¿Has probado con otro SVG?

+0

Intenté cargar el SVG en un navegador y parece estar bien, así que no parece que haya nada de malo en él. Déjame probar otra svg.Oh, ¿también lo probaste con los diseños anidados de la forma en que lo tengo? Me pregunto si eso está contribuyendo al problema. –

+0

Yeap, exactamente el mismo diseño, pero sí, esto es irrelevante. El svg que uso es del proyecto svg-android (el proyecto de fondo de pantalla en vivo) –

+0

Lo probé con la svg que me proporcionaron y parece que funciona. Así que supongo que es un problema con mi svg. –

Cuestiones relacionadas