如何从SD卡加载SVG文件到ImageView?

4

我正在尝试使用Picasso加载从SD卡下载的SVG文件,但它无法正常工作。

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()+"/secciones.svg");
Picasso.with(context).load(file).into(holder.ivIcon);

我之前发现了一个类似的问题,但是那个问题是从assets中加载文件。

从SD卡中将矢量图形加载到ImageView中

是否有可能将下载的.svg文件加载到imageView中?


1
首先,getExternalStoragePublicDirectory() 在大多数 Android 设备上与可移动存储无关。其次,我认为 Picasso 不支持 SVG。 - CommonsWare
2个回答

1

您可以通过将SVG转换为可绘制对象,然后再将其设置到ImageView上来实现此目的。为此,有一个不错的库(有点老旧和未维护)在这里,但我尝试过并且对我有效。代码如下:

File dir = Environment.getExternalStorageDirectory();
    File yourFile = new File(dir, "your_file_path/filename.svg");
    try {
        FileInputStream fileInputStream = new FileInputStream(yourFile);
        SVG svg = SVGParser.getSVGFromInputStream(fileInputStream);
        Drawable drawable = svg.createPictureDrawable();
        imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        imageView.setImageDrawable(drawable);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

0

我们不能在Android应用程序中使用SVG(是的...有第三方库可以用来处理SVG文件)

来源:Android - 使用VectorDrawable

VectorDrawable图像只是一个包含所有图像信息(如线条,曲线等)和每个颜色相关联的xml文件。使用vectorDrawable的最大优点是我们只需要一张图片来适配不同的屏幕设备。这不仅可以减小最终apk的大小,还可以简化项目的维护。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接