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:
- Uso de archivos SVG con libgdx
- Método Android con prioridad (paquete) visibilidad sobreestablecimiento (no debería funcionar, pero sí, ¿por qué?)
- Cómo crear Android VectorDrawables de Illustrator (u otra herramienta similar)?
- Los activos de vector de masas importan Android Studio
- Vector dibujable no dibujado correctamente en Android Studio
<?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.
- Soporte de SVG en Android
- Almacenamiento en caché de imágenes SVG en Android y uso de memoria
- Representación inconsistente de SVG entre escritorio y móvil - ¿es Arial una fuente segura en SVG?
- Rellene lentamente la imagen SVG con color (como barra de progreso) en android
- Svg archivos de representación en android
- Mensaje de advertencia de archivo SVG en el editor de Android Studio
- ¿Por qué imageView.setLayerType (View.LAYER_TYPE_SOFTWARE, null); Y <aplicación android: hardwareAccelerated = "false" tienen un efecto diferente?
- Biblioteca de Android sobre el recurso de reemplazo
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