在 Android 中存储图像的位置

Where to store images in Android

我已将我所有的图像从 mipmap 文件夹移动到 drawable,因为这里说 mipmap 文件夹仅用于应用程序图标以启动应用程序 (答案有 841 个赞)。但是,当我现在想启动我的应用程序时,我收到一条错误消息

 FATAL EXCEPTION: main
    Process: com.example.td.barapp, PID: 4331
    java.lang.RuntimeException: Canvas: trying to draw too large(188394348bytes) bitmap.
        at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:260)

在几个相关问题中,人们告诉将图片存储在不同的 drawable 文件夹中(参见 Android : Understanding drawable folder),例如 drawable-xxhdpi 或 drawable-xxxhdpi。

更新:post 中有人告诉我(后来删除了他的答案)将图像(大小为 1.7 MB)存储在 drawable-anydpi 文件夹中。我按照他说的做了,但是模拟器上的结果对于图像视图来说看起来很糟糕(见截图): 然后我将同一个文件移回 mipmap-xxxhdpi 文件夹,现在它看起来又好了。所以我现在的问题是,将图像放在 mipmap-xxxhdpi 文件夹而不是 drawable 文件夹中是否也可以?我很乐意听取每一个建议,因为我现在很困惑。

java.lang.RuntimeException: Canvas: trying to draw too large(188394348bytes) bitmap

这个异常主要是因为你试图显示一个大图像 ~ 188MB 这将有一个高分辨率,并且 android 对此施加了限制,这也报告了 here

其中一个原因是为了节省设备资源;例如,您可能会得到 java.lang.OutOfMemory,因此系统会从中节省设备内存。

1, 2, 3 可能会在这方面为您提供彻底的指导。

通常您可以在您的应用程序中使用几兆字节的图像 ~0-3MB。 Glide & Picasso 等第三方库在您的 ImageView 上显示图像时提供磁盘、网络和内存管理技术。

您可能考虑的选项之一是在加载图像之前调整图像大小,因此可以查看 this 问题。

请记住,android 会限制您在应用商店中的 apk 文件,因此您需要将图片最小化,或从后端服务器加载它们。

如您所述,您只能将应用程序图标放在 res\mipmap 中。如果您决定将图像放在您的应用程序中,以不同的密度(hdpi、xhdpi、xxhdpi、xxxhdpi...)创建它们会很有效,因此它们可以匹配各种设备分辨率,并让您避免图像失真或通过 android OS 进行高级处理,以便在显示图像之前将您的图像与设备分辨率相匹配。