2011-10-22 13 views
11

Sto cercando di usare un'immagine SVG (creato con Inkscape e salvato come SVG normale) come sfondo per la mia applicazione. Sto cercando di farlo usando la libreria svg-android. Ho un file chiamato background.svg in res/raw. Il mio codice è simile al seguente:L'utilizzo di uno SVG come sfondo disegnabile in 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); 

Tuttavia quando la mia applicazione si avvia, non appare nulla come sfondo (diverso dal colore di sfondo dal layout). Il mio file xml disposizione è la seguente:

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

Sembra che ci sia un problema con il mio SVG. Potrebbe essere dovuto al fatto che tutte le funzionalità non sono supportate.

+0

Hai provato a impostare la Drawable pictureDrawable come sfondo del layout, invece di BitmapDrawable bitmapDrawable? –

+0

@DimitrisMakris Sì, è stata la prima cosa che ho provato, ma ho ancora uno sfondo vuoto. Un altro problema è che non c'è modo di impostare la piastrellatura su 'PictureDrawable'. –

+0

Solo nel caso, - U know Android non supporta nativamente SVG Prova il tuo codice su Firefox per Android? – Chasbeen

risposta

14

Il progetto SVG-Android non è stato aggiornato da più di un anno e non supporta SVG1.2 così SVG generato da Inkscape (open-source) non sono supportati.

V'è tuttavia un nuovo Android libreria svg: AndroidSVG

Sono sulla versione 1.2 e il lavoro sul 1.3 è attualmente in corso. Includendo solo la libreria jar è possibile includere in modo programmato svgs nelle applicazioni Android. Quasi tutte le funzionalità svg sono incluse. Devo ancora trovare un file SVG che non sono stato in grado di incorporare utilizzando questa libreria.

se si include androidsvg dalla sorgente (hg clone) nel progetto come un modulo di libreria si ottiene la classe SVGImageView che è un'estensione di ImageView cui è possibile aggiungere svg al progetto utilizzando i file di layout xml in questo modo:

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

Questo è tutto. Tutto quello che devi fare è inserire filename.svg nella cartella delle risorse e sei a posto.

Esso supporta API 8 e superiori. Ci sono stati alcuni problemi durante l'utilizzo dell'API < 11 ma sono riuscito a risolverli. Li ho postati come problemi nella pagina del progetto e gli autori hanno risposto in pochi minuti. Sono stati aggiunti alla prossima revisione. Se hai problemi, guarda i problemi risolti, in mancanza di ciò che sono disponibile per rispondere alle domande qui.

P.S. La documentazione e gli esempi sulla pagina del progetto sono eccellenti e la biblioteca è una gioia con cui lavorare. Android e svg sono un mix potente.

1

ho provato un esempio utilizzando il seguente codice ed è mostra lo sfondo in modo corretto:

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

Hai provato con un altro svg?

+0

Ho provato a caricare l'SVG in un browser e sembra presentarsi bene, quindi non sembra che ci sia qualcosa di sbagliato in esso. Fammi provare un altro svg.Oh, anche tu l'hai provato con i layout nidificati come il modo in cui lo ho? Mi chiedo se questo contribuisca al problema. –

+0

Yeap, esattamente lo stesso layout, ma questo è irrilevante. Lo svg che uso proviene dal progetto svg-android (il progetto live wallpaper) –

+0

L'ho provato con lo svg che hanno fornito e sembra funzionare. Quindi immagino sia un problema con il mio svg. –

Problemi correlati