“画布:试图绘制太大的位图”当 Android N 显示尺寸设置大于小

新手上路,请多包涵

当新引入的 Display size 操作系统设置设置为太大时,我有一个已发布的应用程序在 Android N 上启动时崩溃。

当我查看 logcat 时,我看到以下消息:

 java.lang.RuntimeException: Canvas: trying to draw too large(106,975,232 bytes) bitmap.

我已经在我的第一个 Activity 中将问题追溯到一个 ImageView,它显示了一个漂亮的大背景图像。有问题的图像是 2048x1066 并且在我的通用 drawables 目录中,所以无论密度如何,都将使用此图像。

Display size 设置为 Small 时,一切正常。但是当我上升到 Default 时,它停止工作。如果我然后将图像换成较小的图像,它可以在 Default 工作,但如果我上升到 Large ,它会再次停止工作。

我的猜测是,向上调整 Display size 会使您的设备表现得像一个物理上更小、像素密度更高的设备。但我不明白我应该在这里做什么。如果我将逐渐变小的图像放入越来越高的分辨率,那么它在真正的大显示器上看起来并不好。还是我不明白什么?

任何指针将不胜感激。

原文由 Brian Rak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 494
2 个回答

我的情况是,将(高分辨率)启动位图从 drawable 移动到 drawable-xxhdpi 是解决方案。

我有同样的问题。我没有怀疑我的启动画面是问题所在,因为它 在应用程序启动时显示的,但事实证明启动画面是问题所在。

在我的例子中,初始屏幕具有 xxhdpi 分辨率,并且它被错误地放置在 drawable 文件夹中,而不是 drawable-xxhdpi 。这使得 Android 假设初始屏幕具有 mdpi 分辨率并将图像缩放到所需大小的 3*3 倍并尝试创建位图。

原文由 Johan Franzén 发布,翻译遵循 CC BY-SA 3.0 许可协议

只是对 Johan Franzén 答案的补充,也许不仅添加 drawable-xxhdpi 密度文件夹,而且添加另一个密度文件夹是个好主意。

因此,无论 android 版本和大小如何,您的应用都可以准备正确大小的图像源:

  1. 将左上角的文件夹视图从 Android 更改为 Project
  2. 转到 YourProjectFolder 文件夹 > app > src > main > res
  3. 以最佳分辨率准备原始图像,并自动将其拆分为每个文件夹大小。你可以在 贝克
  4. 然后创建另一个密度的文件夹,即:
  5. drawable-hdpi , drawable-ldpi , drawable-mdpi , drawable-xhdpi , drawable-xxhdpi , drawable-xxxhdpi
  6. 将每张图片放入相应的文件夹

原文由 Muhammad Faisal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题