2

私はAndroidアプリケーションでsvg画像をimageviewにレンダリングするために以下のコードを使用しています

    ImageView imageView = new ImageView(this);  
    final SVG svg = SVGParser.getSVGFromAsset(getAssets(), "start_4_480.svg");
   imageView.setImageDrawable(svg.createPictureDrawable());

リンク:http ://code.google.com/p/svg-android/wiki/Tutorial 正常に動作しています。ただし、画像のサイズは2 MBです(同じ画像はpng形式で数kbです)。このような画像がたくさんあります。これにより、アプリケーションのメモリが増加します。

だから私はsvgz形式(圧縮されたsvg)の画像を使うことを考えたいです。誰かがsvgz画像をAndroidの画像ビューに直接レンダリングする方法を教えてもらえますか?助けてください。また、これを簡単にするsvn以外のさまざまな画面サイズやさまざまなファイル形式に画像を適応させる他の方法を提案してください。

4

1 に答える 1

2

は正しい。APK の一部として配布している場合は、そのまま圧縮されるため、再度圧縮する必要はありません。

リモート リソースからロードする場合は、パーサーを呼び出す前に InputStream を GZIPInputStream でラップできます。

public static SVG getSVGZFromInputStream(InputStream is) throws SVGParseException {
   SVG svg = null;

   try {
      GZIPInputStream gis = new GZIPInputStream(is);     
      svg = SVGParser.getSVGFromInputStream(gis);
   } catch (IOException e) {
      //handle IO error
   }

   return svg;
}

2 番目の質問に対処するには、SVG を放棄してさらに別のファイル形式にする前に、SVG を最適化して、より許容できるサイズにすることができるかどうかを調査する価値があります。SVG の最適化に関するアイデアについては、この質問への回答を参照して ください。SVG がまだ大きすぎる場合、通常行うべきことは、解像度ごとに複数の PNG にフォールバックすることです。

于 2012-12-14T16:14:19.347 に答える