一个屏幕上有 40 多个 ImageButtons?

40+ ImageButtons on one screen?

在过去的 10 多个小时里,我尝试在单个 Android 屏幕上获取大量 (40+) 图像(以 ImageButton 格式),而不会出现内存不足错误。我使用的 activity 是一个图画书应用程序的图像选择器。图像的大小在(500 到 1200)x(500 到 1200)范围内,PNG(如果重要的话)。

我试过:

我在考虑什么

None 的解决方案似乎与所有设备上可用的 Android 照片库应用程序一样好。这种经历是我很想反映的。虽然不知道这是怎么做到的:(

两个问题。

  1. 完成这样的事情(40 多个图像可在单个屏幕上滚动)的最佳方法是什么?真的是ViewPager吗?带有 AsyncTask 的 ScrollView 和深思熟虑的图像分辨率?我还没有尝试过的东西?
  2. 我应该尽量保持低于多少内存限制?查看 Android heap size on different phones/devices and OS versions 似乎是 256 MB,这个假设合理吗?

谢谢。周末愉快!

PS。在 iOS 上,当我将所有按钮添加到滚动视图中时,一切都像魅力一样:(

一些基本计算揭示了您的问题:

40 多张 1200x1200 的图像 = 大约 57MB,评论是正确的您需要对图像进行子采样(即缩略图)或使用诸如 Universal Image Loader 之类的库。转换为 JPG 无关紧要。即为压缩存储格式,显示像素点所需内存保持不变

Loading Large Bitmaps Efficiently with sample code. The following steps are covered in more detail in the article Android Bitmap Loading for Efficient Memory Usage 上有一篇 Android 开发者文章。

加载大位图的基本步骤是:

  • 确定所需尺寸(从已知尺寸或确定 目标视图的大小)。
  • 使用 BitmapFactory class 获取位图的大小(在 [=42 中设置 inJustDecodeBounds =] 为真)。
  • 计算子采样值并将其传递给BitmapFactory.Options设置inSampleSize.
  • 使用 BitmapFactory 加载缩小尺寸的位图。