Utilizar un SVG como fondo dibujable en Android
Estoy intentando utilizar una imagen SVG (creada usando Inkscape y guardada como SVG normal) 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 se ve así:
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, no aparece nada como el fondo (que no sea el color de fondo del diseño). Mi archivo xml de diseño es el siguiente:
- Soporte de SVG en Android, estado actual
- Recibo sólo pantalla en blanco mientras se utiliza svg-android
- SVG Preserve la relación de aspecto en Android
- Decodificar archivo de imagen SVG (codificado como base64) en java
- Almacenamiento en caché de imágenes SVG en Android y uso de memoria
<?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>
ACTUALIZAR
Parece que hay un problema con mi SVG. Puede ser debido al hecho de que no se admiten todas las funciones.
- Cómo crear dibujos vectoriales para Android?
- Android VectorDrawable no aparece en el diseño
- Error al intentar probar AnimatedVectorDrawable, "No se puede cambiar de x a z"
- El selector de color para la imagen vectorial no funciona
- Uso de archivos SVGZ sin servidor. (IOS local / Android)
- Problema de renderización de VectorDrawable
- SVG en el navegador de Android
- Errores de importación de elementos de Android Studio Vector: Etiquetas no compatibles
El proyecto svg-android no se ha actualizado en más de un año y no soporta SVG1.2 por lo que svgs generados por Inkscape (open-source) no son compatibles.
Sin embargo, hay una nueva biblioteca android svg: AndroidSVG
Están en la versión 1.2 y el trabajo en 1.3 está actualmente en curso. Incluyendo sólo la biblioteca jar uno puede incluir programaticamente svgs en aplicaciones de Android. Casi todas las características svg se incluyen. Todavía estoy por encontrar un svg que no pude incorporar usando esta biblioteca.
Si incluye androidsvg desde el origen (hg clone) en su proyecto como un módulo de biblioteca, obtiene la clase SVGImageView que es una extensión de ImageView por la que puede agregar svg a su proyecto utilizando los archivos de diseño xml como:
<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 lo que necesitas hacer es colocar filename.svg
en la carpeta de activos y podrás ir.
Soporta API 8 y superior. Hubo algunos problemas al usarlo para API <11 pero pude arreglar estos. Los posteé como problemas en la página del proyecto y los autores respondieron en cuestión de minutos. Se han añadido a la próxima revisión. Si tienes algún problema, mira los problemas resueltos, en caso de que no esté disponible para contestar preguntas aquí.
PS La documentación y los ejemplos en la página del proyecto son excelentes y la biblioteca es una alegría para trabajar. Android y svg son una poderosa mezcla.
He intentado un ejemplo con el siguiente código y 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);
¿Ha intentado con otro svg?
- ¿Cómo evitar que el android invierta la imagen de la cámara frente a frente?
- "GoogleApiClient no está conectado todavía" excepción en la aplicación Cast