android - 从 Android 中的文件加载 SVG

标签 android vector okhttp android-glide android-vectordrawable

我想在 ImageView 或 WebView 中显示 .svg 文件。我不知道哪一个更适合这个目的,想听听关于这个问题的一些意见。

请记住,我在编译时没有该文件,因此我无法在 Android Studio 中使用 VectorDrawable API 21 方法,但如果有帮助的话我可以使用该类。

首先,我需要搜索文件系统(私有(private)应用程序存储)中是否没有存储 .svg,如果没有找到,我必须下载并将其保存在文件系统中。我将使用 OkHTTP 从网络下载并保存文件。

我已经在这个项目上使用了 glide,如果这有助于显示 .svg,我希望得到建议,因为我从未使用 glide 处理过 .svg。

对于这种问题我应该使用像 svg-android 这样的旧库吗?我不知道他们是否可靠。

最佳答案

您可以将 Glide 用于 svg 图像。创建一个 requestBuilder :

GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder = Glide.with(this)
                .using(Glide.buildStreamModelLoader(Uri.class, this), InputStream.class)
                .from(Uri.class)
                .as(SVG.class)
                .transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
                .sourceEncoder(new StreamEncoder())
                .cacheDecoder(new FileToStreamDecoder<>(new SvgDecoder()))
                .decoder(new SvgDecoder())
                .listener(new SvgSoftwareLayerSetter<Uri>());

然后:requestBuilder.diskCacheStrategy(DiskCacheStrategy.NONE).load(Uri.parse(svgUrl)).into(imageView);

参见this示例。

像这样创建svgUrl:

    String fileName = "name.jpg";
    String path = Environment.getExternalStorageDirectory() + "/" + fileName;

    File file = new File(path);
    Uri svgUrl = Uri.fromFile(file);

关于android - 从 Android 中的文件加载 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801790/

相关文章:

android - 如何在编辑文本的边框上书写

c++ - 创建空 vector 以将值插入以后

c++ - 从对象 vector 返回特定类的对象

android - 在 AsyncTask 的 doInBackground() 中使用 OkHttp 库发出 HTTP 请求会阻止 UI 操作

java - 改造自定义超时不起作用

android - 如何强制我的 android 应用使用 ipv4 而不是 ipv6?

android - 如何修复 (android.database.CursorWindowAllocationException) 崩溃

java - 如何使用 javafxports android 和 ant 构建 apk?

android - 使用 html5 自动播放 mp4 视频

c++ - std::vector 的 std::vector 邻接