web-dev-qa-db-ja.com

AndroidでのSVGファイルの表示

フロアプランの位置を表示するアプリを作りたい。ナビゲーションはWi-Fiを介して特定の方法で実装されているので、これを実行したので、フロアプランの表示に問題があります。

それはいくつかのベクトル形式であるかもしれません、しばらくインターネットをサーフィンした後、私はそれがsvgファイルでなければならないことを決めました。いくつかの解決策を見つけましたが、うまくいきません!

  1. ライブラリsvg-Android

    .svgファイルを表示する機会がありますが、「単純な」ファイルのみです。チュートリアルのファイルでのみ正常に機能し、他の.svgファイル(たとえば、Inkscapeで作成する他のファイル)では機能しません。

    したがって、私は.svgファイルを解析し、そこからDOMを作成し、どういうわけかオブジェクトと属性を取得し、OpenGL ESを介してそれを描画することにしました。

  2. Apache Batik

    一見、非常に良い解決策ですが、問題があります。 Androidにはいくつかの「ネイティブ」Apacheライブラリがあり、バティックで何かを実行しようとすると、バティックライブラリではなく「ネイティブ」ライブラリで検索するため、NoClassDefFoundErrorがスローされます。 。

    もちろん、プロジェクトにソースコードを追加し、.svgファイルのバティックパーサーだけを取得して何らかの方法で編集することもできますが、多くの作業があり、同じように独自のパーサーを作成できます。

  3. 細い線

    試用版はありませんが、svgファイルとAndroidでどのように機能するか 説明を参照 を実行すると、そのようなファイルのラスタライズのみがあり、それだけです。

独自のパーサーを作成するよりも良い解決策はありますか?誰かがこの問題に遭遇しましたか?

25
Mary Ryllo

#1を使用することをお勧めします。独自のパーサーを作成しないでください。それは大きな頭痛の種になるだろう。

フロアプランはどの程度詳細にする必要がありますか? Android-svgはSVGをかなりよくサポートしています。フィルターや光源をサポートしていません。あなたのSVGにはそれらが含まれません(私は願っています)。

そうしたくない場合は、四分木を調べてください。巨大な画像をレンダリングし、それを4分の1のような形式に分解して、必要な4分割のみをロードできます。

11
Brad

Androidウェブサイトは http://www.vectoroid.com のSVGライブラリを作成しました==

欠けている主なものはSVGアークのサポートで、これは現在修正されており、近い将来のリリースに含まれる予定です。

約1年間取り組んでいるので、フィードバックを探しています。だから何かあれば教えてください...

4
siliconeagle

私はさらに別の SVG for Android ;を使用しています。比較的新しいようです。

GPLv3、CSS2サポート、フォント、テキストとスパン、線形グラデーションと放射状グラデーション、SVGおよびSVGZ、初期フィルタリングサポート、アセットからの画像、Webおよびインラインのbase64エンコード画像。私が試したすべての中で最速。

もちろんフィルターのサポートはより良いかもしれませんが、これを除いてうまく機能し、20メガバイトのSVGファイルも表示します。

1
Victor