【问题标题】:Using SVG as a resource of image view in Android在 Android 中使用 SVG 作为图像视图的资源
【发布时间】:2020-08-28 14:11:19
【问题描述】:

我在使用 SVG 文件作为 imageView 的源文件时遇到问题。 我正在构建一个包含数千个 SVG 绘图的应用程序。当我将它们保存在可绘制文件夹中时它可以工作,但我不想最终得到一个巨大的 APK。当我从服务器将它们作为文件下载时,我无法将它们设置为图像视图的源(我尝试做与此类似的事情,但使用 SVG)

Bitmap temp = BitmapFactory.decodeFile("file path");
        centerImage.setImageBitmap(temp);

但使用 SVG 文件(另存为 XML)。 我查看了整个 Stackoverflow,但我看到的唯一解决方案是将其保存为资源,我更愿意避免这样做。

【问题讨论】:

    标签: android xml svg imageview


    【解决方案1】:

    不幸的是,在 Android 上绘制 SVG 并不容易。我建议您将它们转换为AndroidVectorDrawable。您可以通过使用Android SVG to VectorDrawable 或在Vector Asset Studio 中逐个执行此操作。

    【讨论】:

      【解决方案2】:

      我最终是如何解决的(在 Amir MB 的帮助下): 我从服务器下载了 SVG 作为文件,我是如何使用该文件的,所以将它们放在 ImageView 中:

      //file arrives from server
      try{
          fileInputStream = new FileInputStream(file);
                          try {
                              Bitmap bitmap = Bitmap.createBitmap(dummyImage.getWidth(),dummyImage.getHeight(), Bitmap.Config.ARGB_8888);
                              canvas = new Canvas(bitmap);
                              SVG svg = SVG.getFromInputStream(fileInputStream);
                              svg.setDocumentHeight(dummyImage.getWidth());
                              svg.setDocumentWidth(dummyImage.getHeight());
                              svg.renderToCanvas(canvas);
                              dummyImage.setImageBitmap(bitmap);
                          }catch(SVGParseException S){
                              S.printStackTrace();
                          }
      }catch(IOException e) {
                          e.printStackTrace();
                      }
      

      【讨论】:

        【解决方案3】:

        您可以从输入流中获取 SVG(可能在 AsyncTask 中)并将其转换为 Drawable

        SVG svg = SVGParser.getSVGFromInputStream(inputStream);
        Drawable drawable = svg.createPictureDrawable();
        centerImage.setLayerType(View.LAYER_TYPE_SOFTWARE, null); //turnnig on software rendering
        centerImage.setImageDrawable(drawable);
        

        您也可以选择在 XML 中打开软件呈现:

        android:layerType="software"
        

        【讨论】:

        • 你使用了什么 SVG 库?我正在使用另一个,我没有这些功能
        猜你喜欢
        • 2011-10-03
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        • 2014-12-01
        • 2011-09-14
        • 1970-01-01
        • 2011-06-13
        相关资源
        最近更新 更多