9

目的: できればImageViewを使用してSVG画像ファイルを表示したい。

試行1:

  • 私はそれを行うためにsvg-androidライブラリを使用しています。

  • 私は彼らのチュートリアルを一言一句フォローしています。彼らのコードをコピーしてonCreateに貼り付け、onCreateからアプリコードをコメントアウトしました。

    この前にスプラッシュ画面が表示されますが、とにかくこれを妨げるとは思えません。いずれにせよ、起動インテントを変更して更新を投稿します。

  • 私は彼らのjarファイルをlibsフォルダーに追加し、それを参照しました。

結果1:

私はサムスンギャラクシーI93000(国際版)でテストしています

私が得るのは白い画面だけです。

コンパイルまたはランタイムエラーはありません。

Logcatの出力は次のとおりです。

01-13 01:22:11.755: D/dalvikvm(24889): GC_FOR_ALLOC freed 52K, 7% free 12198K/12995K, paused 17ms, total 17ms
01-13 01:22:11.765: I/dalvikvm-heap(24889): Grow heap (frag case) to 17.000MB for 4642816-byte allocation
01-13 01:22:11.810: D/dalvikvm(24889): GC_CONCURRENT freed 1K, 5% free 16730K/17543K, paused 15ms+2ms, total 43ms
01-13 01:22:12.080: D/dalvikvm(24889): GC_FOR_ALLOC freed <1K, 5% free 16731K/17543K, paused 13ms, total 13ms
01-13 01:22:12.100: I/dalvikvm-heap(24889): Grow heap (frag case) to 21.928MB for 5168972-byte allocation
01-13 01:22:12.125: D/dalvikvm(24889): GC_CONCURRENT freed <1K, 4% free 21779K/22599K, paused 12ms+2ms, total 25ms
01-13 01:22:12.560: D/libEGL(24889): loaded /system/lib/egl/libEGL_mali.so
01-13 01:22:12.595: D/libEGL(24889): loaded /system/lib/egl/libGLESv1_CM_mali.so
01-13 01:22:12.600: D/libEGL(24889): loaded /system/lib/egl/libGLESv2_mali.so
01-13 01:22:12.605: D/(24889): Device driver API match
01-13 01:22:12.605: D/(24889): Device driver API version: 10
01-13 01:22:12.605: D/(24889): User space API version: 10 
01-13 01:22:12.605: D/(24889): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012 
01-13 01:22:12.670: D/OpenGLRenderer(24889): Enabling debug mode 0

アップデート1:

マニフェストからSVGグラフィックをメインアクティビティとして表示するアクティビティを作ってみました。結果に変化はありません。

アップデート2:

別のライブラリ/方法を試してこれを行う-SVGサポート付きのImageView。結果を投稿します。

アップデート3:

ご存知のとおり、AndroidでのSVGサポートについてはすでに見てきました。そこでの答えは、実際にはネイティブソリューションを提供していません。回避策の1つは、SVG jsライブラリを参照して、svgごとに1つずつ静的なhtmlページを作成することです。これはまったく維持できないようです。私は、人々がレガシーコードを見るときに呪う人になるでしょう。

ご想像のとおり、上記の試行はうまくいきませんでした。

4

2 に答える 2

18

あなたはおそらくすでに解決策を見つけていますが、将来の参考のために:

サムスンギャラクシーI93000(国際版)でテストしています

私が得るのは白い画面だけです。

コンパイルまたはランタイムエラーはありません。

おそらく、使用しているImageViewのハードウェアアクセラレーションを無効にする必要があります。

imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

私はsvg-androidのフォークでこれとまったく同じ問題を抱えていましたが、それはハードウェアアクセラレーションのみが原因でした。

于 2013-06-10T17:00:05.343 に答える
4

さて、完全に眠れない夜を過ごした後、これが私が持っているものです。:)

希望1:

* TPSVG_Android_SVG_Library: *これは私が使用したもの、つまりMy Stamp of Approval ;))

この祝福された人の図書館を試してみました。チャームのように働いた。彼はカスタムビューをビューから拡張しているので、レイアウトの基本的なパラメーターのほとんどを使用できます。寄稿者は1人だけです。少なくとも長期的には、本番環境での使用には少し嫌悪感があります。しかし、彼の仕事に敬意を表し、私の差し迫った必要性を満たしてくれたことに感謝します。

これについては、使い方はかなり簡単です。大まかに説明します。

  • リポジトリをzipとしてダウンロードし、Eclipseにインポートします
  • ライブラリプロジェクトとしてプロジェクトに追加します([プロジェクトのプロパティ]-> [Android])。
  • onCreateでそのように使用します。

    SVGView svgView =(SVGView)this.findViewById(R.id.svgImage); SVGParserRenderer image = new SVGParserRenderer(this、R.raw.anime); svgView.setSVGRenderer(image、null); svgView.setBackgroundColor(Color.WHITE);

  • これを配置するためにFrameLayoutを使用しました。これはAndroid用のWYSIWYGエディターに表示されないため、たくさんの試行錯誤が必要でした。これを一時的にImageViewに置き換えて、フォーマットを処理することができます。

  • このタグで使用され、Viewクラスに属していないパラメーターは、コンパイルエラーの原因になります。

問題:実行時にこのビューでドローアブル(SVG)を切り替える方法をまだ完全には理解していません。誰かがそれを理解した場合は、親切に手順を投稿してください。

希望2:

Vectoroid:

これは有望なようです。彼らはライブラリと一緒にいくつかのベクターベースのアプリを持っています。これを使用してSVGドローアブルをロードする方法を完全に理解できませんでした(まだサポートされていないようです)。ちょっと待って!彼らのブログでは、「SVG to drawable」を実装しており、まもなくリリースされるとのことですわーい!

于 2013-01-13T01:19:40.690 に答える