2011-10-22 77 views
11

私のアプリケーションの背景としてSVGイメージ(Inkscapeを使って作成し、プレーンSVGとして保存)を使用しようとしています。私はsvg-androidライブラリを使ってこれをしようとしています。 res/rawbackground.svgというファイルがあります。私のコードは次のようになります。Androidでバックグラウンド描画可能なSVGを使用する

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に問題があることが表示されます。すべての機能がサポートされていないことが原因である可能性があります。

+0

Drawable pictureDrawableをBitmapDrawableビットマップ描画の代わりにレイアウトの背景として設定しようとしましたか? –

+0

@DimitrisMakrisはい、私が試した最初のことでしたが、まだ空白の背景があります。別の問題は、 'PictureDrawable'にタイリングを設定する方法がないことです。 –

+0

ちょうど場合; - アンドロイドがSVGをネイティブにサポートしていないことを知っています Android用のFirefoxでコードをお試しください。 – Chasbeen

答えて

14

svg-androidプロジェクトは1年以上で更新されておらず、SVG1.2をサポートしていないため、Inkscape(オープンソース)によって生成されたsvgsはサポートされていません。

新しいAndroid SVGライブラリがしかしあります:彼らは、バージョン1.2と1.3での仕事にしているAndroidSVG

は現在進行中です。 jarライブラリだけを含め、プログラムでAndroidアプリケーションにsvgを含めることができます。ほぼすべてのsvg機能が含まれています。私はまだ私がこのライブラリを使用して組み込むことができなかったsvgを見つけることです。

あなたは、ライブラリモジュールとして、プロジェクト内のソース(HGクローン)からandroidsvg含まれている場合、あなたはそのようなXMLレイアウトファイルを使用してプロジェクトにSVGを追加することができるImageViewのの拡張であるSVGImageViewクラスを取得:

<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をassetsフォルダに置き、あなたが行こうとするだけです。

API 8以上をサポートしています。 API < 11の場合はいくつかの問題がありましたが、これを修正できました。私はプロジェクトページに問題として投稿し、著者は数分以内に回答しました。それらは次のリビジョンに追加されました。何か問題がある場合は解決された問題を見て、失敗してここで質問に答えることができます。

P.S.プロジェクトページのドキュメントと例は優れており、ライブラリはうまく動作します。 Androidとsvgは強力な組み合わせです。

1

私は、次のコードを使用した例を試してみましたが、それは、正しく背景を示しています

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

あなたは別のSVGを試みたことがありますか?

+0

ブラウザでSVGを読み込もうとしましたが、問題なく表示されるように見えるようです。私は別のsvgを試してみましょう。ああ、また、私はそれを持っている方法のようなネストされたレイアウトでそれを試しましたか?それが問題に寄与しているのだろうか。 –

+0

同じレイアウトであれば、これを無視してください。しかし、これは無関係です。私が使用しているのは、svg-androidプロジェクト(ライブ壁紙プロジェクト)のものです –

+0

私は彼らが提供したSVGで試してみました。だから私はそれが私のsvgの問題だと思います。 –

関連する問題