【问题标题】:Where to store images in AndroidAndroid中的图像存储位置
【发布时间】:2020-02-16 17:26:20
【问题描述】:

我已将我所有的图像从文件夹 mipmap 移动到 drawable,因为这里说 mipmap 文件夹仅用于应用程序图标启动应用程序Mipmaps vs. drawable folders(答案得到 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)

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

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

【问题讨论】:

  • 用户外部库,Picasso 或 Glide 加载您的图像。
  • 感谢海德尔的回答。由于我是 Android 编程新手,我不得不承认我不明白为什么要使用外部库来加载图像。到目前为止,如果我将图像放入 mipmap 目录,加载图像对我来说不是问题。我可以直接在 XML 代码中引用它们。 Picasso 或 Glide 有什么用?
  • 好吧,您可以将它们放在 drawable-anydpi 中,但是使用外部库处理它们可以为您提供更好的服务,因为它们也提供了其他选项。
  • 感谢海德尔的回答。使用此类外部库时我还有哪些其他选择?
  • 您可以获得图像中心裁剪、中心圆形等选项。这是滑翔的链接github.com/bumptech/glide

标签: android android-drawable mipmaps


【解决方案1】:

java.lang.RuntimeException: Canvas: 也想画 大(188394348bytes)位图

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

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

123 可能会彻底指导您。

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

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

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

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

【讨论】:

  • @VanessaF 对不起,我算错了;是的,您应该为要处理的所有分辨率创建文件夹,这不是必须的,而是最佳实践;你在MyAppName\app\src\main\res`..下创建它们。每个文件夹代表一个特定的分辨率,并以“drawable-”命名,后跟hdpi、xhdpi......每个文件夹必须具有相同名称的相同图像,但分辨率和大小不同跨度>
  • 请查看this了解有关每种分辨率的密度、大小和像素的更多信息
  • 还有一个取舍,增加不同的密度,会让你的apk尺寸变大;当系统仅选择适当的图像密度而不进行任何处理以将一张图像仅适合不同的设备密度时,同时节省设备电池并减少处理。
  • @VanessaF 肯定 192x192 不能适合所有图像尺寸;这只是向您展示不同密度之间的比率的示例。如果您注意到您提供的 url 中的引用 > 您应该遵循六个主要密度之间的 3:4:6:8:12:16 缩放比例。这只是一个比例,它假设您已经有一个 48x48 像素的 mdpi 图像;然后您可以使用该比率乘以 4 (48*4=192) 来计算 xxhdpi
  • 请查看this图片以获取比例说明...让我检查后面的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2011-12-12
  • 2014-06-17
相关资源
最近更新 更多