【发布时间】:2020-06-07 10:10:49
【问题描述】:
我正在制作一个中文字典应用程序,可以向用户显示汉字笔顺动画。我使用MakeMeAHanzi 作为源,可用于为笔画顺序动画生成动画 SVG。一个 SVG 对应一个汉字。使用相同的概念,我生成了动画矢量可绘制对象。
目前我的 android 应用程序包含 9000 多个动画矢量可绘制对象,并且构建需要很长时间。我也收到此错误,仅当我添加 9000 多个动画矢量可绘制对象时才会出现:
com.google.common.util.concurrent.SettableFuture@72771445[status=PENDING] 等待 10 分钟(加上 203200 纳秒延迟)
我考虑过使用 GIF 并从扩展文件中加载它,但我真的很想拥有分辨率独立的优势。我已经尝试从扩展文件中加载动画矢量可绘制对象,但似乎我无法从文件系统加载 .xml 作为可绘制对象,除非我将其预编译为二进制 XML,我认为这将是我最后的手段,因为我仍然由于我无法构建 APK(我可以从 APK 中提取预编译的二进制 XML),因此不确定如何实现这一点。
我想知道是否有更有效的方法来处理大量矢量绘图或其他替代方法来处理这种情况?谢谢。
【问题讨论】:
-
我能问一下为什么你有这么多动画矢量绘图吗?你有超过 9000 个这样的事实有点代码味道。
-
您可以尝试在您的项目中创建一个库模块,将这些资源放在库模块中,并让您的应用程序模块依赖于库模块。初始构建将花费您习惯的时间,但它可能有助于未来的构建。基本上,您希望构建系统不必经常弄乱这些资源。但是,除此之外,我将回应 asky 的问题:为什么您首先拥有 9000 多个动画矢量绘图?我们无法就“处理这种情况的其他替代方案”向您提供建议,除非您详细说明您将如何处理它们。
-
我实际上正在制作一个显示笔顺动画的中文字典。我使用的源码来自MakeMeAHanzi,可用于为9000多个汉字创建动画SVG,一个字符一个SVG文件。因此,基于相同的想法,我生成了动画矢量可绘制对象,因为与 SVG 相比,android 在处理可绘制对象方面更有效。
-
@asky 我同意我的方法是有问题的。我仍在寻找合适的方法来处理它。
-
您描述的用例似乎是拥有 9000 个 SVG 的好理由。可能没有办法减少这个数字并使应用程序达到其预期目的。我以前从未遇到过这个问题,所以我能想到的是,如果您希望用户只同时查看几个可绘制对象,您可以在运行时从 SVG 生成可绘制对象。我不知道一个好的库选择来做到这一点(许多 android svg 库似乎没有维护),所以这个选项最终可能不起作用。
标签: java android android-studio android-resources animatedvectordrawable